2010-09-03 7 views
5

Ich habe diese Methode:Einen Stream von einem absoluten Pfad erhalten?

public RasImage Load(Stream stream);

, wenn ich wie eine URL geladen werden soll:

string _url = "http://localhost/Application1/Images/Icons/hand.jpg";

Wie kann ich diese URL machen in einem Bach und übergeben sie in meine load Methode?

Antwort

4

Hier ist eine Möglichkeit. Ich weiß nicht wirklich, ob es der beste Weg ist oder nicht, aber es funktioniert.

// requires System.Net namespace 
WebRequest request = WebRequest.Create(_url); 

using (var response = request.GetRespone()) 
using (var stream = response.GetResponseStream()) 
{ 
    RasImage image = Load(stream); 
} 

UPDATE: Es sieht aus wie in Silverlight, die WebRequest Klasse keine GetResponse Methode hat; Sie haben keine andere Wahl, als dies asynchron zu tun.

Unten finden Sie einen Beispielcode, der veranschaulicht, wie Sie vorgehen könnten. (Ich warne dich: Ich habe das gerade geschrieben, ohne viel darüber nachzudenken, wie sinnvoll es ist. Wie du diese Funktionalität implementierst, wäre wahrscheinlich ganz anders. Auf jeden Fall solltest du dir zumindest einen Überblick darüber verschaffen, was du brauchst do.)

WebRequest request = WebRequest.Create(_url); 

IAsyncResult getResponseResult = request.BeginGetResponse(
    result => 
    { 
     using (var response = request.EndGetResponse(result)) 
     using (var stream = response.GetResponseStream()) 
     { 
      RasImage image = Load(stream); 
      // Do something with image. 
     } 
    }, 
    null 
); 

Console.WriteLine("Waiting for response from '{0}'...", _url); 
getResponseResult.AsyncWaitHandle.WaitOne(); 

Console.WriteLine("The stream has been loaded. Press Enter to quit."); 
Console.ReadLine(); 
+0

Ein ähnlicher, aber kürzerer Ansatz wäre die Verwendung von 'WebClient.OpenRead'. –

+0

@Fredrik: Schön, wusste nicht darüber. Geht zu zeigen, gibt es fast immer mehr als eine Möglichkeit, eine Katze zu häuten. –

+0

Leute, diese Methoden scheinen nicht im System.Net für das Silverlight zu sein, irgendwelche Hinweise .... 'request.GetRespone())' oder 'WebClient.OpenRead' Ich kann sie nicht verwenden – VoodooChild

4

Dan's Antwort ist eine gute, obwohl Sie von localhost anfordern. Ist das eine Datei, auf die Sie vom Dateisystem aus zugreifen können? Wenn ja, sollten Sie in der Lage sein, einfach einen FileStream zu übergeben:

FileStream stream = new FileStream(@"\path\to\file", FileMode.Open); 
+0

Es sieht aus wie die Der localhost-Pfad war nur ein Beispiel - wahrscheinlich möchte er Bilder aus dem Internet herunterladen und lokal bearbeiten. Nicht, dass ich solche Dinge jemals machen würde> _> – JustLoren

+0

Guter Fang auf dem localhost Teil; Ich hatte es nicht einmal bemerkt. –

+0

Wenn ich es in ein lokales Dateisystem ändere, bekomme ich 'File Operation nicht erlaubt. Der Zugriff auf den Pfad '../images/Icons/thumb.gif' wird verweigert. 'Auf dem FileStream ... alle Hinweise – VoodooChild

Verwandte Themen