无法访问多线程中的文件

时间:2011-02-23 17:25:42

标签: c# multithreading file

using (FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write, FileShare.None))
{
    using (StreamWriter sw = new StreamWriter(fs))
    {
        sw.WriteLine(DateTime.Now.ToString());  
           // multiple sw.WriteLine
    }
}

尽管FileShare设置为“None”,但仍会启动异常“进程无法访问该文件,因为该文件正由另一个进程使用。
我在多线程上下文中,文件不在其他地方写入/读取。

为什么?

2 个答案:

答案 0 :(得分:5)

FileShare.None说“不要让任何人分享这个文件” - 与你想要的相反。我相信你是在FileShare.ReadWrite之后。

话虽如此,我建议完全避免这个问题。在单个线程中处理您的写作会更好,并使用生产者/消费者方法来请求添加条目。

BlockingCollection<T>类适用于此类场景。你可以有多个线程,每个线程都为集合添加一个新的“条目”,一个线程在后台运行,只调用GetConsumingEnumerable(),并写出所有的值。

答案 1 :(得分:2)

您正在尝试从多个线程写入文件 - 如果没有某种同步以确保在尝试由另一个线程写入之前文件已关闭,则无法进行此操作。

至于FileShare设置为None - 这意味着多个线程允许共享文件,因此当然会出现共享冲突异常。

  

无 - 拒绝共享当前文件。在文件关闭之前,任何打开文件的请求(通过此过程或其他过程)都将失败。