2012-07-06 9 views
9

Ich habe mit einem einfachen Problem zu kämpfen. Ich möchte ein Bild aus Internet herunterzuladen diesen Code verwenden: (. ZB eine Datei id.jpg im Speicher des App erstellen)WinRT StorageFile schreiben heruntergeladene Datei

WebRequest requestPic = WebRequest.Create(@"http://something.com/" + id + ".jpg"); 
WebResponse responsePic = await requestPic.GetResponseAsync(); 

Nun wollte ich die WebResponse Stream in einem StorageFile schreiben, aber ich habe nicht Irgendeinen Weg gefunden, das zu erreichen. Ich suchte im Internet nach, aber kein Erfolg - alle Wege inkompatibel Stream-Typen und so weiter.

Könnten Sie bitte helfen?

Antwort

12

Ich habe die folgende Lösung gefunden, die funktioniert und nicht zu kompliziert ist.

public async static Task<StorageFile> SaveAsync(
     Uri fileUri, 
     StorageFolder folder, 
     string fileName) 
    { 
     var file = await folder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting); 
     var downloader = new BackgroundDownloader(); 
     var download = downloader.CreateDownload(
      fileUri, 
      file); 

     var res = await download.StartAsync();    

     return file; 
    } 
+0

Große Antwort. Einfach und es funktioniert perfekt. Keine Probleme mehr beim Lesen von "nicht vollständigen" Dateien. Vielen Dank Alter. – nicruo

+0

Mein Vergnügen ;-). –

7

Sie müssen den Antwortstream in einen Puffer lesen und dann die Daten in eine StorageFile schreiben. Der folgende Code zeigt ein Beispiel:

 var fStream = responsePic.GetResponseStream(); 
     var file = await ApplicationData.Current.LocalFolder.CreateFileAsync("testfile.txt"); 
     using (var ostream = await file.OpenStreamForWriteAsync()) 
     { 
      int count = 0; 
      do 
      { 
       var buffer = new byte[1024]; 
       count = fStream.Read(buffer, 0, 1024); 
       await ostream.WriteAsync(buffer, 0, count); 
      } 
      while (fStream.CanRead && count > 0); 
     } 
Verwandte Themen