我希望能够在 Win32 中锁定文件,以便它只能由我当前的进程使用。实现这一目标的最明显方法似乎是通过
CreateFile
:
HANDLE file = ::CreateFile("c:\\foo.txt",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
但是,一旦该调用成功,该文件显然也被我自己的进程锁定,即。一旦 MFC 框架尝试打开它,我就会收到“共享冲突”。
有没有一种方便的方法来阻止其他进程访问该文件,但仍然允许我的进程访问该文件?我不想替换所有加载/保存框架代码...我在传递给 CreateFile 的参数中做错了什么吗?
来自创建和打开文件:
应用程序还使用 CreateFile 来 指定是否要共享 文件用于读取、写入、或 两者都不。这就是所谓的共享 模式。未共享的打开文件 (dwShareMode 设置为零)不能 再次打开,或者通过 打开它的应用程序或通过 另一个应用程序,直到它的句柄 已经被关了。这也有参考 作为独占访问权。
我不知道有什么简单的方法可以做到这一点。至于更复杂的方法,您可以:
请注意,我并不是说我会建议这样做——它很丑陋,而且或多或少是对系统的滥用——但如果你确定需要这样做,那么这是一种可能有效的方法。