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

3

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

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

然而,一旦这个调用成功了,该文件也显然被我的进程锁定了,即一旦MFC框架尝试打开它时,我会收到"共享冲突"的错误。

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

2个回答

4
创建和打开文件中得知:
应用程序还使用CreateFile指定它是否想要共享文件以进行读取、写入、两者或都不进行。这被称为共享模式。未共享的已打开文件(dwShareMode设置为零)不能再次被打开,无论是由打开它的应用程序还是由另一个应用程序打开,直到其句柄被关闭。这也被称为独占访问。 另请参见FILE_SHARE_*位如何与所需访问位交互?

1

我不知道有什么简单的方法来做到这一点。至于更复杂的方法,您可以:

  1. 为访问该文件设置一个特殊的用户名。
  2. 非共享方式打开文件。
  3. 编辑ACL以仅允许使用特定的用户名
  4. 关闭文件。
  5. 模仿该用户
  6. 打开允许共享的文件
  7. 关闭文件
  8. 将ACL设置回允许其他用户访问

请注意,我并不是说我完全推荐这样做 - 这是丑陋的,而且更或多或少是系统的滥用 - 但是如果您确定需要这样做,那么可能会有一种方式适用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接