我知道答案必須在某處,我應用了許多其他問題以及來自MSDN本身的建議,但我可能在此忽略了某些內容。儘管鎖定塊寫入文本文件時發生IOException
這是我的方法,我用它來將輸出轉儲到文件。爲了清楚起見,附上鎖對象聲明
private static Object fileLock = new Object();
private static void WriteToFile(string msg, bool WriteLine)
{
lock (fileLock)
{
msg = DateTime.Now.ToShortTimeString() + " - " + msg;
FileInfo F = new FileInfo("dump.txt");
using (StreamWriter writer = F.Exists ? F.AppendText() : F.CreateText()) //<--THIS LINE THROWS
{
if (WriteLine)
writer.WriteLine(msg);
else
writer.Write(msg);
}
}
}
的問題是:爲什麼using
線之上拋出IOException
抱怨另一個進程正在使用該文件的第2次我打電話的方法是什麼?
我打電話像這樣在我的代碼:
Console.WriteLine(something)
#if(DEBUG)
Extensions.WriteToFile(something,true);
#endif
同樣,我肯定這是一個很小的問題,別人問這樣的事情得到正確的答案,但我我無法挖掘它。
UPDATE
重構出FileInfo
對象並切換到File.XXX
方法制備的代碼工作正常。我仍然想知道這個問題是什麼,無論如何,這個問題看起來像解決了。
這不會編譯,因爲您正在從靜態方法訪問實例成員('fileLock')。鎖標識符的聲明在實際上是什麼樣子的? – Guffa
你正在運行你的應用程序的2個實例嗎? – user7116
@Guffa fileLock確實是靜態的,該行沒有像其他代碼一樣拷貝。編輯修復。 – Alex