我希望能够在Win32中锁定文件,以便它只能由我当前的进程使用。实现这一目标最明显的方法似乎是通过CreateFile
:
HANDLE file = ::CreateFile("c:\\foo.txt",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
然而,一旦该调用成功,该文件显然也被我自己的进程锁定,即。一旦MFC框架尝试打开它,我就会收到“共享冲突”。
是否有一种方便的方法可以阻止其他进程访问该文件,但仍然可以通过我的方式允许它?我宁愿不必替换所有加载/保存框架代码......我在传递给CreateFile的参数中做错了吗?
答案 0 :(得分:4)
应用程序也使用CreateFile 指定是否要共享 用于阅读,写作,两者或 都不是。这被称为共享 模式。一个未共享的打开文件 (dwShareMode设置为零)不能 再次开放,要么是由 打开它或通过它的应用程序 另一个应用程序,直到其处理 已被关闭。这也是提到的 作为独家访问。
另见How do the FILE_SHARE_* bits interact with the desired access bits?
答案 1 :(得分:1)
我不知道有任何简单的方法可以做到这一点。至于更复杂的方法,你可以:
请注意,我并不是说我会建议它 - 它很丑陋,或多或少是对系统的滥用 - 但是如果你确定你需要这样做,那么它可能是一种方式工作