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”,但仍会启动异常“进程无法访问该文件,因为该文件正由另一个进程使用。
我在多线程上下文中,文件不在其他地方写入/读取。
为什么?
答案 0 :(得分:5)
FileShare.None说“不要让任何人分享这个文件” - 与你想要的相反。我相信你是在FileShare.ReadWrite之后。
话虽如此,我建议完全避免这个问题。在单个线程中处理您的写作会更好,并使用生产者/消费者方法来请求添加条目。
BlockingCollection<T>
类适用于此类场景。你可以有多个线程,每个线程都为集合添加一个新的“条目”,一个线程在后台运行,只调用GetConsumingEnumerable()
,并写出所有的值。
答案 1 :(得分:2)
您正在尝试从多个线程写入文件 - 如果没有某种同步以确保在尝试由另一个线程写入之前文件已关闭,则无法进行此操作。
至于FileShare
设置为None
- 这意味着多个线程不允许共享文件,因此当然会出现共享冲突异常。
无 - 拒绝共享当前文件。在文件关闭之前,任何打开文件的请求(通过此过程或其他过程)都将失败。