2016-07-01 59 views
3

我正在嘗試將HTTP內容寫入FileStream中,並且出現「無法訪問關閉文件」的錯誤等待CopytoAsync(流)。如果我刪除了「等待」,它將繼續操作,沒有任何異常,但寫入的文件大小爲0KB。任何想法,我犯了錯誤?C#,將HTTP內容寫入FileStream的問題,無法訪問已關閉的文件

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的異步部分到達其中的部分它拋出。我懷疑這個例外仍然被拋出,但成爲一個未被發現的例外 – Ladi

+0

@拉迪懷疑等待是完全正確的。異常發生非常隨機。有時用於訪問tempdir並經常訪問服務器路徑。我設法用我發佈的代碼作爲答案來完成它。 – Benjamin

回答

4

我解決了這個問題,通過使用FileData屬性而不是MultipartFormDataStreamProvider中的Content。

此外,我不再使用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

相關問題