2012-07-06 70 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); 
     }