2012-07-06 16 views
9

Tôi đang gặp khó khăn với một vấn đề dễ dàng. Tôi muốn tải một hình ảnh từ trang web sử dụng mã này: (. Ví dụ như tạo ra một id.jpg tập tin trong lưu trữ của ứng dụng)WinRT StorageFile ghi tập tin tải về

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

Bây giờ tôi muốn viết dòng của WebResponse trong một StorageFile, nhưng tôi đã không tìm thấy bất kỳ cách nào để đạt được điều đó. Tôi đã tìm kiếm trên web cho nó, nhưng không thành công - tất cả các cách không tương thích với các loại luồng và v.v.

Bạn có thể trợ giúp không?

Trả lời

12

Tôi đã tìm thấy giải pháp sau, hoạt động và không quá phức tạp.

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

Câu trả lời hay. Đơn giản và nó hoạt động hoàn hảo. Không còn gặp sự cố khi đọc tệp "chưa hoàn thành". Cám ơn nhiều, ông bạn. – nicruo

+0

Niềm vui của tôi ;-). –

7

Bạn sẽ cần phải đọc luồng phản hồi vào bộ đệm rồi ghi dữ liệu vào StorageFile. Mã sau đây cho thấy một ví dụ:

 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); 
     } 
Các vấn đề liên quan