【发布时间】:2011-01-13 22:27:18
【问题描述】:
我能否使用不同的标志打开同一个文件两次(使用 CreateFileA)(在这种情况下,一个带有 FILE_FLAG_NO_BUFFERING,一个没有)?
具体来说,是这样的:在启动期间,我创建了一个临时文件(带有 FILE_FLAG_DELETE_ON_CLOSE)。我按顺序填充它,我不想担心在这部分做无缓冲的 IO。然后,在进程运行时,我想使用无缓冲 IO 访问该文件,因为我有自己的缓存逻辑。因此,我正在考虑再次打开同一个文件,这次使用 FILE_FLAG_NO_BUFFERING,然后关闭旧句柄。我想以这种重叠的方式这样做有两个原因:
- 并发。如果我在打开新句柄之前关闭旧句柄,那么其他人可能会在此期间弄乱我的文件。
- FILE_FLAG_DELETE_ON_CLOSE 会在我关闭第一个句柄而不打开另一个句柄时删除我的文件。这是一个小烦恼,我可以解决。
【问题讨论】:
-
随机问题:为什么要使用
CreateFileA而不是CreateFileW? -
整个系统不是我自己写的,只写了这一部分。他们将文件名作为 char* 给我,所以我将它用作 char* :-) 此外,我可以写一篇关于为什么 WCHAR 愚蠢的咆哮,当然,除了它在 Windows API 中的广泛使用你不得不使用它。
-
啊,好的。很抱歉我在这里的情绪,但我经常被那些拒绝打开文件的应用程序咬伤,因为我有一些使用不适合旧代码页的 Unicode 的文件夹。
-
我不怎么做winapi的东西,但如果有充分的理由使用
CreateFile而不是fopen或fstream? -
是的,@Kitsune。您提到的技术不允许指定诸如缓冲模式或删除模式之类的东西,这是本问题的主题。