C# 通过一个进程锁定文件

C# 通过一个进程锁定文件,c#,.net,process,file-locking,C#,.net,Process,File Locking,我有一个应用程序,它同时运行多个进程来读取和写入文件 private Process PrepareProcess(string workingDirName, string scriptPath, string[] args) { var process = new Process { StartInfo = { WorkingDirectory = workingDirName, File

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

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;
    }
我需要确保文件在同一时间只被一个进程修改。怎么做

进程将运行外部脚本,该脚本将修改文件。我不知道如何打开文件。我需要管理正在运行的进程

谢谢

传递到
文件。打开文件时打开

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

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

看看


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

一个文件不能由多个进程同时修改。如果发生这种情况,您将得到一个异常。@Muctadir这不是真的。请参阅
FileShare.Write
FileShare.ReadWrite
是您自己启动的流程(使用您自己的源代码)还是外部第三方的流程?谢谢。我忽略了这一点。