using (FileStream fs = File.Open(@"C:logslog1.txt",FileMode.Append,
FileAccess.Write, FileShare.ReadWrite))
{
using (StreamWriter w = new StreamWriter(fs))
{
w.WriteLine(logMessage);
w.Flush();
isSuccessful = true;
}
}
在上面的代码中,我正在实例化一个FileStream对象,以便该文件在FileShare.ReadWrite模式下打开。
我的问题:这是否意味着将一行写入打开的文件的代码将是线程安全的,或者 FileShare.ReadWrite 意味着线程安全以外的其他内容?
不,它只允许多个进程写入文件。如果您希望 File.Write 操作是线程安全的,您仍然需要在 File.Write 操作上实现一些锁定机制。
有关详细信息,请查看此问题的答案:在高负载的 .ashx http 处理程序中将记录附加到磁盘文件的最快、最安全的方法是什么?
FileShare
与线程安全无关。FileAccess
和 FileShare
的值仅在打开文件时使用。他们可能会导致失败,他们控制着你和其他人拥有的权利。
除此之外,当涉及多个进程和线程时,行为没有变化。
单个 FileStream
实例不是线程安全的。