2012-11-29 204 views
3

我想寫一個字符串數組到一個文件,這通常應該是一件容易的事情。然而,以下簡單代碼拋出IOException,表示該文件正在被另一個進程使用。問題是,該代碼運行之前,該文件甚至不存在。我可以保證,沒有其他進程正在使用該文件。那麼我該如何說服愚蠢的.NET框架該文件沒有被另一個進程使用,並且可以繼續?因爲這真的不應該那麼難。爲什麼不能正常工作?

StreamWriter writer = new StreamWriter(ListFileName); 

foreach (string s in InfoLineList) 
{ 
    writer.WriteLine(s); 
} 
+0

可你只需要使用'File.WriteAllLines(路徑,InfoListList)' ?也許無論你遇到什麼文件鎖定問題都可以避免。 –

+0

我可以。但我真的很想知道爲什麼它認爲該文件在其他地方打開? –

+0

好的,我將它改爲使用WriteAllLines,現在它可以工作。我仍然不明白爲什麼它不能以另一種方式工作,如果有人能夠向我解釋這一點,但是WriteAllLines確實起作用,我將不勝感激。 –

回答

4

這可能是因爲你沒有關閉流,所以有些句柄在某處被卡住。也許代碼是一個Web應用程序的一部分,並且Web服務器進程保持這個鎖定,或者代碼被多次運行。我建議在using塊使用流:

using(StreamWriter writer = new StreamWriter(ListFileName)) 
{ 
    foreach (string s in InfoLineList) 
    { 
     writer.WriteLine(s); 
    } 
} 

這將確保StreamWriter被妥善處理。

如果你真的想知道文件打開了什麼,請使用SysInternal's Handle tool來檢查。我願意打賭這是你自己的計劃。

最後,正如我在評論說,該File.WriteAllLines()方法可以寫入字符串枚舉列表保存到文件一次全部:

File.WriteAllLines(ListFileName, InfoListList); 
+0

+1用於「使用」語句。 –