【问题标题】:Windows: Overwrite File In UseWindows:覆盖正在使用的文件
【发布时间】:2010-10-17 03:09:29
【问题描述】:

我正在尝试编写一个允许在 Windows 中移动文件的实用程序,当它发现正在使用的文件时,会将该文件设置为在重新启动时移动。

看来 MoveFileEx (http://msdn.microsoft.com/en-us/library/aa365240(VS.85).aspx) 是正确的调用,但是我无法从 GetLastError (http://msdn.microsoft.com/en-us/library/ms679360(VS.85).aspx) 中找出我正在寻找什么错误代码来查看该文件正在使用中。

我希望实用程序在存在实际权限问题时失败。有没有办法区分 you-can't-write-there 和 in-use overwrite 错误?

另外,如果我在用户的临时文件夹中有要移动的文件,它们会在延迟重命名之前被删除吗?

【问题讨论】:

    标签: c++ c windows winapi overwrite


    【解决方案1】:

    您必须先致电CreateFile 以查看该文件是否正在使用中。

    查看文件是否正在使用:

    如果您获得了有效的文件句柄,那么您就知道该文件与已打开此文件的进程没有冲突的共享权限。

    如果您指定不共享访问(0 到 CreateFile 调用的 dwShareMode 参数),那么如果任何其他进程当前正在以任何方式使用该文件,您将不会获得文件句柄。在这种情况下,GetLastError 将返回:ERROR_SHARING_VIOLATION (32)


    查看访问文件是否存在安全问题:

    要查看访问该文件是否存在权限问题,CreateFile 调用也会失败,但会出现不同的 GetLastError。你会得到:ERROR_ACCESS_DENIED (5)

    【讨论】:

      猜你喜欢
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      • 2018-11-05
      • 2013-06-07
      • 2019-05-23
      • 1970-01-01
      • 2011-05-23
      • 2020-12-29
      相关资源
      最近更新 更多