锁定文件但允许当前进程使用?

时间:2010-08-05 23:55:36

标签: winapi mfc locking

我希望能够在Win32中锁定文件,以便它只能由我当前的进程使用。实现这一目标最明显的方法似乎是通过CreateFile

HANDLE file = ::CreateFile("c:\\foo.txt", 
                           GENERIC_READ | GENERIC_WRITE,
                           0,
                           NULL,
                           OPEN_EXISTING,
                           FILE_ATTRIBUTE_NORMAL,
                           NULL);

然而,一旦该调用成功,该文件显然也被我自己的进程锁定,即。一旦MFC框架尝试打开它,我就会收到“共享冲突”。

是否有一种方便的方法可以阻止其他进程访问该文件,但仍然可以通过我的方式允许它?我宁愿不必替换所有加载/保存框架代码......我在传递给CreateFile的参数中做错了吗?

2 个答案:

答案 0 :(得分:4)

来自Creating and Opening Files

  

应用程序也使用CreateFile   指定是否要共享   用于阅读,写作,两者或   都不是。这被称为共享   模式。一个未共享的打开文件   (dwShareMode设置为零)不能   再次开放,要么是由   打开它或通过它的应用程序   另一个应用程序,直到其处理   已被关闭。这也是提到的   作为独家访问。

另见How do the FILE_SHARE_* bits interact with the desired access bits?

答案 1 :(得分:1)

我不知道有任何简单的方法可以做到这一点。至于更复杂的方法,你可以:

  1. 设置用于访问文件的特殊用户名。
  2. 打开非共享文件。
  3. 编辑ACL以仅允许使用特殊用户名
  4. 关闭文件。
  5. 冒充该用户
  6. 打开文件,允许分享
  7. 关闭文件
  8. 重新设置ACL以允许其他用户访问
  9. 请注意,我并不是说我会建议它 - 它很丑陋,或多或少是对系统的滥用 - 但是如果你确定你需要这样做,那么它可能是一种方式工作