2011-01-13 87 views
1

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

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

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

随机问题:为什么你想使用`CreateFileA`而不是`CreateFileW`? – Joey 2011-01-13 22:32:05

+1

我没有自己写整个系统,只有这个部分。他们给我的文件名为char *,所以我把它用作char * :-)另外,我可以写一个关于WCHAR为什么很愚蠢的说法,除了当然,它的用途在Windows API中非常丰富你必须使用它。 – 2011-01-13 22:34:24

回答

1

只记得在共享模式下包含FILE_SHARE_DELETE。我认为FILE_FLAG_DELETE_ON_CLOSE是影响的不仅仅是“你的”句柄的唯一标志。

0

不是很荒谬吗?

您想打开两次,因为如果在关闭之后打开之前处理某人可能会弄乱您的文件。但现实情况是,你正在试图弄乱你的文件。

如果不能保证排他性文件访问如何防止某人做某事?但是,如果您专门打开如何重新打开文件?

据我所知,如果文件已经打开独占没有更开放是允许的,甚至相同的过程。

相关问题