如何从C#中的多个进程附加到共享文件?

时间:2019-01-30 17:50:00

标签: c# .net windows

在将问题标记为重复之前,请仔细阅读问题。

  • 我们有一个Windows文件服务器。
  • 我们还在不同的计算机上运行着多个 .NET 进程,它们全部定期附加到共享文件(在文件服务器上)(我们称之为foo.txt

我们如何确保从所有进程对文件进行序列化写入,而不必在文件服务器上创建 .lock 文件。

注意不要使用lock / Mutex / Semaphore / WaitHandle,因为进程在不同的计算机上运行。

我能想到的最好的方法(我没有理由认为它不起作用)是

private void TryWrite(string filePath, string payload)
{
    for (var i = 0; i < 10; ++i)
    {
        try
        {
            using (var fs = File.Open(filePath, FileMode.Append, FileAccess.Write, FileShare.Read))
            using(var writer = new StreamWriter(fs))
            {
                writer.WriteLine(payload);
            }
            return;
        }
        catch
        {
            System.Threading.Thread.Sleep(1000 * (i + 1));
        }
    }

    // log unable to write
}

但是我仍然偶尔会收到来自不同进程的交错写入。

非常感谢您的帮助。

0 个答案:

没有答案