C# 尽管锁定了块,但在写入文本文件时发生IOException

C# 尽管锁定了块,但在写入文本文件时发生IOException,c#,locking,ioexception,streamwriter,appendtext,C#,Locking,Ioexception,Streamwriter,Appendtext,我知道答案肯定在某个地方,我应用了许多其他问题和MSDN本身的建议,但我可能忽略了一些东西 这是我的方法,我使用它将输出转储到文件。为清晰起见,附上锁定对象声明 private static Object fileLock = new Object(); private static void WriteToFile(string msg, bool WriteLine) { lock (fileLock) { msg = DateTime.Now.ToShort

我知道答案肯定在某个地方,我应用了许多其他问题和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);
        }
    }
}
再一次,我确信这是一个微不足道的问题,有人问了这样的问题,得到了正确的答案,但我无法把它挖掘出来

更新


重构
FileInfo
对象并切换到
File.XXX
方法使代码工作正常。我仍然想知道问题是什么,不管怎么说,问题看起来已经解决了。

@Guffa:declaration必须是私有静态对象fileLock=newobject()

@亚历克斯:你的代码在我的机器上运行得很好,虽然对任务来说有点太复杂了

static void Write(string text, string file)
    {
        using (StreamWriter sw = File.AppendText(file))// Creates or opens and appends
        {
            sw.WriteLine(text);
        }
    }

可能某些防病毒或索引器会锁定转储文件。

当您从静态方法访问实例成员(
fileLock
)时,该文件不会编译。锁标识符的声明实际上是什么样子的?您正在运行应用程序的两个实例吗?@Guffa fileLock确实是静态的,该行不像代码的其余部分那样被复制粘贴。编辑以修复调试期间仅运行一个实例的问题。我的下一个问题是,为什么不在日志记录期间保持打开文件?还有哪些方法(如果有的话)可以访问
dump.txt
?你是从外部看的吗?因为重构FileInfo对象似乎已经解决了这个问题(不知道为什么,但仍然如此),所以这一点被接受。谢谢
static void Write(string text, string file)
    {
        using (StreamWriter sw = File.AppendText(file))// Creates or opens and appends
        {
            sw.WriteLine(text);
        }
    }