2016-07-30 6 views
3

私は(アプリが実行されている場合)、これらのメソッドを使用してアプリケーションストレージにファイルを保存しようとしている:ファイルに保存することができませんでしUWP

まず、私はURIからファイルを作成します。

StorageFile file = await StorageFile.CreateStreamedFileFromUriAsync(name, uri, RandomAccessStreamReference.CreateFromUri(uri)); 

は、その後私は後でそれを使用できるようにアプリケーションのストレージにファイルをコピーします。

StorageFile file2 = await file.CopyAsync(ApplicationData.Current.LocalFolder, name, NameCollisionOption.ReplaceExisting); 

しかし、第二の方法CopyAsync()はFAIランダム、その後終了していません5分待ってからこのエラーが表示されます:

Error screenshot

Lifecycle processes

また、プロセス)は、アプリケーションのライフサイクルに方法を、私は彼がCopyAsyncを(トンを呼び出すたびに追加されます。

いずれかのプロセスをクリックすると、CopyAsync()メソッドが終了します。

この問題を解決するには、携帯電話を再起動してアプリをアンインストールする必要があります。

注:これをバックグラウンドタスクで試してみると、これは100%失敗します。

+0

フルプロジェクトは[my github repo](https://github.com/rootasjey/citations365)にあります。 –

答えて

3

私が問題にthis post

のおかげで解決することができたし、コードも同様にバックグラウンドタスクで動作します:)

FileStorage.CopyAsync()メソッドが失敗した理由を説明していません、誰かがより多くの情報を得るまでは回避策です。

コードスニペット

(CopyAsyncは()バックグラウンドタスクに失敗したときに、それがバックグラウンドタスクまたはフォアグラウンドのアプリでこのメソッドへのFUTURの呼び出しをブロックしますらしい):

private async Task<StorageFile> DownloadImagefromServer(string URI, string filename) { 
     filename += ".png"; 
     var rootFolder = await ApplicationData.Current.LocalFolder.CreateFolderAsync("Citations365\\CoverPics", CreationCollisionOption.OpenIfExists); 
     var coverpic = await rootFolder.CreateFileAsync(filename, CreationCollisionOption.FailIfExists); 

     try { 
      HttpClient client = new HttpClient(); 
      byte[] buffer = await client.GetByteArrayAsync(URI); // Download file 
      using (Stream stream = await coverpic.OpenStreamForWriteAsync()) 
       stream.Write(buffer, 0, buffer.Length); // Save 

      return coverpic; 
     } catch { 
      return null; 
     } 
} 
関連する問題