11

在我的项目中,我必须在 USB 设备中创建一些临时文件,我想在关闭时将其删除。所以我使用了类似的代码

this.fcommandHandler = new FileStream(TempFileName,
FileMode.CreateNew, FileAccess.ReadWrite,
FileShare.ReadWrite, 512, FileOptions.DeleteOnClose);

它工作正常。但问题是我想再使用一个 FileOption,比如没有缓冲。

private const FileOptions FILE_FLAG_NO_BUFFERING = (FileOptions)0x20000000;

this.fcommandHandler = new FileStream(TempFileName,
FileMode.CreateNew, FileAccess.ReadWrite,
FileShare.ReadWrite, 512, FileOptions.DeleteOnClose & FILE_FLAG_NO_BUFFERING);

但它不会在关闭后删除文件。请帮忙。

4

3 回答 3

11

您需要使用|而不是&.

这些是二进制标志,当您说 时&,您实际上将它们全部屏蔽掉,导致根本没有选项。

于 2009-09-18T12:29:34.870 回答
4

使用FileOptions.DeleteOnClose | FILE_FLAG_NO_BUFFERING取消&它们。

FILE_FLAG_NO_BUFFERING & FileOptions.DeleteOnClose返回FileOptions.None

于 2009-09-18T12:29:54.153 回答
0

尝试WriteThrough使用 | 在列表中包含标志 操作员。请参阅此KB,了解使用要求FILE_FLAG_NO_BUFFERING。有趣的是,MS 没有在枚举中包含这个标志。在这种情况下是否有理由WriteThrough不做你需要的事情?您正在尝试编写安全数据?

于 2009-09-18T12:46:31.140 回答