2012-07-06 15 views
9

Mam problem z łatwym problemem. Chcę, aby pobrać obraz z sieci przy użyciu tego kodu: (Np. Utworzenie id.jpg plików w pamięci masowej o aplikacji)WinRT StorageFile Napisz pobrany plik

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

Teraz chciałem napisać strumienia w WebResponse on w StorageFile, ale nie mam znaleźć jakiś sposób, aby to osiągnąć. Przeszukałem sieć, ale bez powodzenia - wszystkie sposoby niezgodne z typami strumieni i tak dalej.

Czy możesz pomóc?

Odpowiedz

12

Znalazłem następujące rozwiązanie, które działa i nie jest zbyt skomplikowane.

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

Świetna odpowiedź. Prosty i działa idealnie. Nie ma więcej problemów podczas czytania plików "niekompletnych". Dzięki wielkie. – nicruo

+0

Moja przyjemność ;-). –

7

Będziesz musiał odczytać strumień odpowiedzi do bufora, a następnie zapisać dane w pliku StorageFile. Poniższy kod pokazuje przykład:

 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); 
     }