我知道答案必须在某处,我应用了许多其他问题以及来自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