【发布时间】:2011-05-21 15:37:57
【问题描述】:
有一项服务不断将新内容写入文件:
using (var stream = File.Create(FileName)) // overwrites the file
{
stream.Write(data, 0, data.Length);
}
多个阅读器(包括从该文件呈现其内容的网络应用程序)不断访问该文件。我无法控制读者客户端代码。该文件应始终可供读者访问。更重要的是,他们应该看到整个内容,而不是正在写入文件的内容。
任何类似的技术:
using (var stream = File.Create(FileName + ".tmp"))
{
stream.Write(data, 0, data.Length);
}
File.Delete(FileName);
File.Move(FileName + ".tmp", FileName);
可能导致网页上缺少内容(有一定的可能性)。并且服务有时会抛出IOException 异常,并显示消息“该进程无法访问该文件,因为它正被另一个进程使用”。
问题是:如何在不中断读者客户端访问的情况下不断更换文件内容?
【问题讨论】:
-
我很确定这是不可能的。
-
通过使用全局互斥锁同步对文件的读取访问?
-
@Tergiver:不幸的是,无法控制阅读器客户端代码。
-
您的阅读器代码是如何托管 IIS、服务、桌面应用程序或其他东西的?
标签: c# concurrency filesystems writer