2016-07-01 19 views
3

HTTPコンテンツをFileStreamに書き込もうとしていますが、の行で「クローズファイル」にアクセスできません。 CopytoAsync(ストリーム)を待ちます。 「を待つ」場合は、例外なく処理を継続しますが、書き込まれるファイルサイズは0KBです。私が間違いを犯しているアイデアは?C#、FileStreamにHTTPコンテンツを書き込む問題、閉じたファイルにアクセスできない

var provider = new MultipartFormDataStreamProvider(tempdir); 
    await Request.Content.ReadAsMultipartAsync(provider); 
      foreach (var content in provider.Contents) 
    { 
     using (var stream = new FileStream(serverPath, FileMode.Create, FileAccess.ReadWrite)) 
       { 
        await content.CopyToAsync(stream); 
       } 
    } 
+1

例外は、例外を引き起こしているファイルも指定していますか?例外がtempdir内のファイルへのアクセスやserverPath内のファイルへのアクセスによって引き起こされたのだろうかと思います。 awaitを削除するときに例外が発生しないという事実は説明するのが簡単です:CopyToAsyncメソッドが呼び出されますが、呼び出し側は、CopyToAsyncのasyn部分がどこに到達するのを待たずに次のループに進みますそれはスローする。私は例外がまだスローされている疑いがありますが、観察されない例外になります – Ladi

+0

@ラディあなたの疑惑が待っていることはまったく正しいです。例外は非常にランダムに発生します。時にはtempdirにアクセスし、しばしばサーバーのパスにアクセスするためのものです。私は答えとして投稿したコードを使ってそれを完成させました。 – Benjamin

答えて

4

私はこの問題を、MultipartFormDataStreamProviderのContentではなくFileDataプロパティを使用して解決しました。

また、私はCopyToAsyncをもう使用していません。代わりに、通常のFile.Moveを使用しています。それは私にとって完璧に機能します。

var provider = new MultipartFormDataStreamProvider(tempdir); 
    await Request.Content.ReadAsMultipartAsync(provider); 
     foreach (var content in provider.FileData) 
      { 
       File.Move(content.LocalFileName, serverPath); 
      } 
+0

それは私にとってもうまくいきました。不思議なことに、HttpContentのFileStreamとCopyToAsyncは非同期のシナリオでは機能しません – Raffaeu

関連する問題