当写入文本文件时,尽管锁定了块
本文关键字:锁定 文本 文件 | 更新日期: 2023-09-27 18:15:33
我知道答案必须在某个地方,我应用了许多其他问题和MSDN本身的建议,但我可能在这里忽略了一些东西。
这是我的方法,我用它来转储输出到文件。为清晰起见,附加了锁对象声明。
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
抱怨另一个进程在第二次调用该方法时正在使用该文件?
我在代码中这样调用它:
Console.WriteLine(something)
#if(DEBUG)
Extensions.WriteToFile(something,true);
#endif
再一次,我确定这是一个微不足道的问题,其他人问了类似的问题得到了正确的答案,但我无法挖掘它。
重构出FileInfo
对象并切换到File.XXX
方法使代码工作良好。我仍然想知道问题是什么,无论如何,问题看起来已经解决了。
@Guffa:声明必须是私有静态对象fileLock = new object();
@alex:你的代码在我的机器上工作得很好,尽管对于任务来说有点太复杂了。
static void Write(string text, string file)
{
using (StreamWriter sw = File.AppendText(file))// Creates or opens and appends
{
sw.WriteLine(text);
}
}
可能是一些杀毒软件或索引器锁定了您的转储文件。