2012-07-06 19 views
9

Sono alle prese con un problema facile. Vorrei scaricare un'immagine dal web utilizzando questo codice: (es. Creare un file id.jpg nella memoria del app)WinRT StorageFile scrive il file scaricato

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

Ora ho voluto scrivere flusso del WebResponse in uno StorageFile, ma non ho trovato un modo per farlo. Ho cercato sul Web per questo, ma senza successo - tutti i modi incompatibili con i tipi di streaming e così via.

Potrebbe aiutarmi per favore?

risposta

12

Ho trovato la seguente soluzione, che funziona e non è troppo complicata.

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

Ottima risposta. Semplice e funziona perfettamente. Niente più problemi durante la lettura di file "non completi". Grazie mille amico. – nicruo

+0

Il mio piacere ;-). –

7

Sarà necessario leggere il flusso di risposta in un buffer, quindi scrivere i dati in un file di archiviazione. Il seguente codice mostra un esempio:

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