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

时间:2009-11-10 11:10:50

标签: 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();

现在问题是在写入期间其他应用程序可以打开文件,这在我当前的应用程序中是不可取的。 FileStream有一个锁定方法,但锁定写入而不是读取,所以这对我没有帮助。

2 个答案:

答案 0 :(得分:23)

您正在寻找fourth parameter of the FileStream Constructor

public FileStream(
    string path,
    FileMode mode,
    FileAccess access,
    FileShare share
)

所以在你的情况下:

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

FileShare - 枚举:

  

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

     

成员:

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

答案 1 :(得分:-1)

我不知道是否有可能。

例如,Firefox在使用其他名称下载时存储文件,直到完成为止。当一切都在那里时,它会将其重命名为原始名称。不同的文件后缀将避免用户尝试双击打开它。