[英]How can I generate notifications that data written via a FileStream is on the disk?
[英]How can I lock a file while writing to it via a FileStream?
我试图找出如何使用FileStream
和BinaryWriter
编写二进制文件,并在写入时保持文件锁定以供读取。 我特别不希望其他应用程序/进程能够在写入时从中读取。
//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
有一个Lock方法,但是会锁定写入而不是读取,所以这对我没有帮助。
您正在寻找FileStream
构造函数的第四个参数 。
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不直接支持此功能。
我不知道是否有可能。
例如,Firefox在使用其他名称下载时存储文件,直到完成为止。 当一切都在那里时,它会将其重命名为原始名称。 不同的文件后缀将避免用户尝试双击打开它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.