有一项服务不断将新内容写入文件:
using (var stream = File.Create(FileName)) // overwrites the file
{
stream.Write(data, 0, data.Length);
}
多个阅读器(包括从该文件呈现其内容的 Web 应用程序)不断访问该文件。我无法控制读者客户端代码。该文件应始终可供读者访问。更重要的是,他们应该看到整个内容,而不是正在写入文件的内容。
像这样的任何技术:
using (var stream = File.Create(FileName + ".tmp"))
{
stream.Write(data, 0, data.Length);
}
File.Delete(FileName);
File.Move(FileName + ".tmp", FileName);
可能导致网页上缺少内容(有一定的可能性)。并且该服务有时会抛出IOException
异常消息“该进程无法访问该文件,因为它正在被另一个进程使用”。
问题是:如何在不中断读者客户端访问的情况下不断更换文件内容?