通过一个进程锁定文件

问题描述 投票:0回答:2

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

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;
}

我需要确保该文件一次只能由一个进程修改。我怎样才能做到这一点?

该过程将运行一个外部脚本来修改文件。我无法打开该文件。我需要管理正在运行的进程。

c# .net process file-locking
2个回答
6
投票

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

看一下 Mutex 类

还值得注意的是,默认情况下,如果您打开文件,

FileShare
将是
None
,这意味着在我关闭文件之前不与任何人共享访问权限。所以当尝试在另一个进程中访问时会失败。您不能同时修改它。为了防止这种失败和处理异常,所有使用“互斥体”都是一种优雅的方式。


3
投票

打开文件时将

FileShare.None
传递给
File.Open

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

© www.soinside.com 2019 - 2024. All rights reserved.