通过一个进程锁定文件

时间:2013-11-14 08:03:49

标签: c# .net process file-locking

我有一个应用程序,它同时运行多个进程来读取和写入文件。

private Process PrepareProcess(string workingDirName, string scriptPath, string[] args) {
        var process = new Process {
            StartInfo = {
                WorkingDirectory = workingDirName,
                FileName = scriptPath,
                Arguments = string.Format(string.Join(" ", args))
            }
        };
        return process;
    }

我需要确保文件只能由一个进程同时修改。怎么做?

该进程将运行外部脚本,该脚本将修改文件。我无法管理如何打开文件。我需要管理运行过程。

谢谢!

2 个答案:

答案 0 :(得分:6)

您可以使用“命名互斥锁”。它可以帮助你说“嘿等等,我正在处理该文件!”。您可以等待或忽略该文件。

查看Mutex class

另外值得注意的是,默认情况下,如果您打开文件,FileShare将为None,这意味着不会与任何人共享访问权限,直到我关闭文件。因此,当尝试访问另一个进程时它将失败。您无法同时修改它。为了防止这种失败和处理异常,所有使用“Mutex”都是一种优雅的方式。

答案 1 :(得分:3)

打开文件时,将FileShare.None传递给File.Open

这将阻止多个进程同时写入文件的任何尝试。缺点是,如果某个进程在另一个进程已打开时尝试打开该文件,则第二次尝试将失败。如果这是一个问题,那么您可能需要使用互斥锁来序列化访问。使用互斥锁的优点是它允许第二个进程阻塞并等待文件可用。