2012-07-06 19 views
9

Estoy luchando con un problema fácil. Quiero descargar una imagen desde la web utilizando este código: (. Ej crear un id.jpg archivo en el almacenamiento de la aplicación)WinRT StorageFile escribe archivo descargado

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

Ahora quería escribir corriente del WebResponse en un StorageFile, pero no tienen encontrado alguna manera de lograr eso. Busqué en la web, pero no tuve éxito. De todos modos, los tipos de secuencias son incompatibles, etc.

¿Podría ayudarnos?

Respuesta

12

He encontrado la siguiente solución, que funciona y no es demasiado complicada.

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

Gran respuesta. Simple y funciona perfectamente. No más problemas mientras lee archivos "no completos". Muchas gracias hombre. – nicruo

+0

Es un placer ;-). –

7

Deberá leer el flujo de respuesta en un búfer y luego escribir los datos en un StorageFile. El siguiente código muestra un ejemplo:

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