10

我正在尝试编写一个允许在 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 ) 查看该文件正在使用中。

当存在实际权限问题时,我希望该实用程序失败。有没有办法区分你不能在那里写和正在使用的覆盖错误?

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

4

1 回答 1

10

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

要查看文件是否正在使用中:

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

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


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

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

于 2009-04-02T14:33:23.283 回答