用不同的标志打开同一个文件两次?

时间:2011-01-13 22:27:18

标签: c++ windows winapi

我可以使用不同的标志打开同一个文件两次(使用CreateFileA)(在这种情况下,一个使用FILE_FLAG_NO_BUFFERING,一个没有)?

详细说明,情况就是这样:在启动期间,我创建了一个临时文件(使用FILE_FLAG_DELETE_ON_CLOSE)。我按顺序填写它,我不想担心在这部分做无缓冲的IO。然后,在进程运行时,我想使用无缓冲的IO访问该文件,因为我有自己的缓存逻辑。因此,我想再次打开同一个文件,这次使用FILE_FLAG_NO_BUFFERING,然后关闭旧句柄。我想以这种重叠的方式做到这一点有两个原因:

  1. 并发。如果我在打开新手柄之前关闭旧手柄,其他人可能会在此期间弄乱我的文件。
  2. FILE_FLAG_DELETE_ON_CLOSE会在关闭第一个句柄而不打开另一个句柄时删除我的文件。这是一个小麻烦,我可以解决。

2 个答案:

答案 0 :(得分:1)

请记住在共享模式中包含FILE_SHARE_DELETE。我认为FILE_FLAG_DELETE_ON_CLOSE是唯一影响的不仅仅是“你的”句柄。

答案 1 :(得分:0)

这不是很荒谬吗?

你想要打开两次,因为如果在关闭上一个句柄后打开,有人可能会弄乱你的文件。但现实是,你正在试图弄乱你的文件。

如果不能保证独家文件访问,你怎么能阻止别人做某事?但是,如果你专门打开如何重新打开文件?

AFAIK,如果文件已经完全打开,则不允许打开,即使是在同一个过程中也是如此。