2012-05-20 57 views
0

我有他下面的代碼流或文件不打烊

HttpPostedFileBase files = Request.Files[0]; 
    Stream fileStream = files.InputStream; 

    using (Stream file = System.IO.File.OpenWrite(originalImage)) 
    { 
     StreamUtil.CopyStream(fileStream, file); 
     file.Close(); 
     fileStream.close(); 
     fileStream.dispose(); 
    } 

    // here is CopyStream method 

    public static void CopyStream(Stream input, Stream output) 
    { 
     var buffer = new byte[8*1024]; 
     int len; 
     while ((len = input.Read(buffer, 0, buffer.Length)) > 0) 
     { 
      output.Write(buffer, 0, len); 
     } 
    } 

當我嘗試寫同一個文件,我得到

The process cannot access the file \u0027D:FILENAME because it is being used by another process 

我怎麼能收呢?因此一旦請求寫作完成後,它會被關閉?

+2

什麼是'fileStream'?它從何而來? – Oded

+0

更新了代碼,它來自請求。 – DarthVader

+0

這是否會在每次嘗試再次寫入同一文件時發生?您是否嘗試使用[filemon](http://technet.microsoft.com/en-us/sysinternals/bb896642.aspx)查看哪個進程正在鎖定文件? – Oded

回答

0

我想把它寫成註釋,但目前尚不清楚這樣:

試着做這樣的事情:

MemoryStream fileStream = new MemoryStream(); 

fileStream.WriteByte(04); 

using (Stream file = System.IO.File.OpenWrite(originalImage)) 
{ 
    CopyStream(fileStream, file); 
} 

using (Stream file = System.IO.File.OpenWrite(originalImage)) 
{ 
    CopyStream(fileStream, file); 
} 

你得到第二線使用了同樣的錯誤?

+0

你能解釋嗎? – DarthVader

+0

我試圖檢查,如果你關閉它後立即打開文件,你會得到相同的消息(因爲我認爲該文件沒有從你的發佈代碼鎖定,但從其他地方)。 如果您嘗試打開它兩次,並且您不會收到消息,則可以確定該文件已從其他地方鎖定。 – eyossi

+0

這真的不是一個有效的解決方案我所做的是添加日期時間滴答文件名稱,所以它不會再是同一個文件 – DarthVader

相關問題