2012-07-06 63 views
9

我正在努力解決一個簡單的問題。我想使用此代碼從網上下載的圖像(如:在應用中創建的存儲文件id.jpg)WinRT StorageFile寫入下載文件

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

現在我想寫WebResponse的在一個StorageFile流,但我沒有找到了實現這一目標的方法。我在網上搜索了它,但沒有成功 - 所有方法都不兼容Stream類型等等。

你能幫忙嗎?

回答

12

我找到了下面的解決方案,它的工作原理並不太複雜。

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

很棒的回答。簡單,它完美的作品。閱讀「不完整」文件時沒有更多問題。非常感謝你。 – nicruo 2012-08-31 10:47:31

+0

我的榮幸;-)。 – 2012-10-20 16:18:25

7

您需要將響應流讀入緩衝區,然後將數據寫入StorageFile。下面的代碼顯示了一個示例:

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