锁定文件以进行写入/删除,同时允许任何进程读取

Mat*_*ing 12 .net c# file-io

我正在使用C#(.NET)开发应用程序,并且在处理文件锁定时遇到问题.

  • 我的主应用程序(A)需要对某个文件进行读/写访问.
  • 单独的应用程序(B)需要对同一文件的读访问权.
  • 我需要阻止用户在我的应用程序(A)运行时编辑或删除文件.应用程序(A)是长期运行的.在(A)运行时,不得删除该文件,即使没有主动读取或写入该文件也是如此.

我完全控制了(A)和(B)的来源,所以我可以修改它们中的任何一个.

如何在应用程序(A)运行时阻止用户修改/删除文件,同时允许应用程序(A)读/写,应用程序(B)读取?

Clo*_*ger 16

使用FileShare.Read仅允许从其他应用程序读取.您可以通过在应用程序A运行时打开流来锁定文件.您需要NonClosingStreamWrapper避免在处置时丢弃流StreamWriter(这会自动发生using)

NonClosingStreamWrapper通过Jon Skeet可以在这里找到

应用程序启动时使用它来锁定文件

FileStream fileStream = new FileStream(file, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);
Run Code Online (Sandbox Code Playgroud)

写入文件时使用

using (StreamWriter sr = new StreamWriter(new NonClosingStreamWrapper(fileStream)))
{
    // File writing as usual
}
Run Code Online (Sandbox Code Playgroud)

当应用程序结束时使用它来释放文件

fileStream.Close();
Run Code Online (Sandbox Code Playgroud)