Windows:覆盖正在使用的文件

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

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

当有实际的权限问题时,我希望该实用程序失败。 有无论如何区分一个你不能写 – 在那里和一个使用中的覆盖错误?

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

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

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

如果你得到一个有效的文件句柄,那么你知道这个文件与已经打开这个文件的进程没有冲突的共享权限。

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


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

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