2009-11-10 73 views
10

我想弄清楚如何编写FileStreamBinaryWriter的二进制文件,并在写入时保持文件锁定以供读取。我特别不希望其他应用程序/进程能够在写入时从其中读取数据。如何在通过FileStream写入文件时锁定文件?

//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有一个锁定方法,但锁定写入而不是读取,所以这对我没有帮助。

回答

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 -Enum:

包含常数来控制访问类型等的FileStream 对象可以有相同的文件。

成员:

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

我不知道这是否可能。

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