如何通过FileStream写入文件时锁定文件?

Ste*_*eed 10 c# io

我试图找出如何写一个二进制文件与FileStreamBinaryWriter,并保持锁定为读而我写的文件.我特别不希望其他应用程序/进程能够在写入时从中读取.

//code to declare ba as a byte array

//dpath is the path to the file

FileStream BinaryFile = new FileStream(dpath, FileMode.Create, FileAccess.Write);

BinaryWriter Writer = new BinaryWriter(BinaryFile);

Writer.Write(ba);

Writer.Close();

BinaryFile.Dispose();
Run Code Online (Sandbox Code Playgroud)

现在问题是在写入期间其他应用程序可以打开文件,这在我当前的应用程序中是不可取的.在FileStream有锁的方法,但锁住写,而不是阅读,这样就不会帮我.

Bob*_*bby 23

您正在寻找构造函数第四个参数FileStream.

public FileStream(
    string path,
    FileMode mode,
    FileAccess access,
    FileShare share
)
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下:

FileStream BinaryFile = new FileStream(dpath, FileMode.Create,
                                       FileAccess.Write, FileShare.None);
Run Code Online (Sandbox Code Playgroud)

FileShare -Enum:

包含用于控制其他FileStream对象可以拥有到同一文件的访问类型的常量.

成员:

  • ,拒绝共享当前文件.在文件关闭之前,任何打开文件的请求(通过此进程或其他进程)都将失败.
  • 读取,允许随后打开文件进行读取.如果未指定此标志,则在文件关闭之前,任何打开文件以供读取(通过此进程或其他进程)的请求都将失败.但是,即使指定了此标志,仍可能需要其他权限才能访问该文件.
  • 写入,允许随后打开文件进行写入.如果未指定此标志,则在文件关闭之前,任何打开文件以进行写入(通过此进程或其他进程)的请求都将失败.但是,即使指定了此标志,仍可能需要其他权限才能访问该文件.
  • ReadWrite,允许随后打开文件进行读写.如果未指定此标志,则在文件关闭之前,任何打开文件以进行读取或写入(通过此进程或其他进程)的请求都将失败.但是,即使指定了此标志,仍可能需要其他权限才能访问该文件.
  • 删除,允许后续删除文件.
  • 可继承,使子进程可以继承文件句柄.Win32不直接支持此功能.