Winapi CopyFileEx和部分锁定的文件

Winapi CopyFileEx和部分锁定的文件,winapi,Winapi,我从一开始就使用CopyFileEx,它一直工作得很好。如果文件未锁定,它将复制该文件。如果文件已锁定,则不会锁定,GetLastError将报告错误。一切都很好 但是,有些文件被部分锁定,PST outlook文件就是最好的例子。在这种情况下,CopyFileEx开始复制,当它命中文件中被锁定的部分时,它将挂起并且永远不会返回(在Windows 7上,也可能在其他系统上) 有没有办法避免这个问题 您可以自己复制,首先调用LockFileEx。它有一个标志,如果它不能锁定您要求它锁定的内容,它会

我从一开始就使用CopyFileEx,它一直工作得很好。如果文件未锁定,它将复制该文件。如果文件已锁定,则不会锁定,GetLastError将报告错误。一切都很好

但是,有些文件被部分锁定,PST outlook文件就是最好的例子。在这种情况下,CopyFileEx开始复制,当它命中文件中被锁定的部分时,它将挂起并且永远不会返回(在Windows 7上,也可能在其他系统上)


有没有办法避免这个问题

您可以自己复制,首先调用
LockFileEx
。它有一个标志,如果它不能锁定您要求它锁定的内容,它会立即失败。

有一种方法可以避免它,但没有简单的解决方案。
请看我的.< /P>我想你不会认为“从你所有的系统中删除前景”是一个很好的答案吗?这里有类似的问题;只有在通过IO.Copy从.Net代码调用时,生成的文件才会被删除。我遇到了同样的问题CopyFileEx挂起在Windows 7上,看不出原因吗?回调甚至没有被调用,调用方也没有从CopyFileEx;返回)是的,我知道并通过API使用VSC,但我的问题是关于直接拷贝。我提到的开放文件驱动程序可以为您完成这项工作。我回答的另一个问题是,除了使用这些驱动程序外,没有其他简单的方法。@Lobuno:你可以编写自己的文件系统过滤器驱动程序,但这可能超出了你的需要范围,可能只是一个多年的项目。是的,这太过分了。。。实际上,我的程序使用VSC,但对于那些出于某种原因而没有这种功能的用户,我只是尝试直接复制。文件是否被复制对我来说并不重要。重要的是函数是否失败,但它不会挂起我的应用程序。