代码之家  ›  专栏  ›  技术社区  ›  kgriffs

覆盖Windows中打开的文件

  •  2
  • kgriffs  · 技术社区  · 16 年前

    在什么情况下,Windows允许您覆盖打开的文件?这是允许的吗?这包括将不同的文件重命名为与打开的文件相同的名称。

    1 回复  |  直到 16 年前
        1
  •  6
  •   asveikau    16 年前

    如果你看 documentation for CreateFile() 就是这样 dwShareMode 参数。这可以确定另一个进程在打开该文件时可以对其执行什么操作。

    指定 FILE_SHARE_READ 让另一个进程打开文件进行读取。有 FILE_SHARE_WRITE 这意味着另一个进程可以对其进行写入。还有 FILE_SHARE_DELETE ,它允许删除和(IIRC)也可以重命名。

    如果有人打开文件时没有 文件共享写入 打开文件进行写访问,您将获得 ERROR_SHARING_VIOLATION . 否则你应该可以写信给它。

    不幸的是,如果有一个进程出现,并且没有设置共享标志来允许您需要的东西,那么您就不太走运了。虽然你可以使用 MoveFileEx() 有选择权 MOVEFILE_DELAY_UNTIL_REBOOT . 但我不确定这是否有效;我对那个电话不太了解,只知道它存在。-)