【问题标题】:CopyFileEx and partially locked filesCopyFileEx 和部分锁定的文件
【发布时间】:2011-01-20 13:18:47
【问题描述】:

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

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

有什么办法可以避免这个问题吗?

【问题讨论】:

  • 我想您不会认为“从所有系统中删除 Outlook”是一个好的答案? :-)
  • 这里有类似的问题;仅当通过 IO.Copy 从 .Net 代码调用时,才会删除生成的文件。
  • 我遇到了同样的问题 CopyFileEx 在 Windows 7 上挂起,看不出原因?甚至没有调用回调,调用者也没有从 CopyFileEx 返回;)

标签: winapi


【解决方案1】:

有一种方法可以避免它,但没有简单的解决方案。 请看我的answer here

【讨论】:

  • 是的,我知道并通过 API 使用 VSC,但我的问题是关于直接复制。
  • 我提到的打开文件驱动程序可以为您完成这项工作。我的答案的另一部分适用的是,除了使用这些驱动程序之外没有简单的方法。
  • @Lobuno:您可以编写自己的文件系统过滤器驱动程序,但这可能超出了您的需求范围,并且可能只是一个多年的项目。
  • 是的,这太过分了...实际上我的程序使用 VSC,但对于那些出于某种原因没有该功能的用户,我只是尝试直接复制。对我来说,文件是否被复制并不重要。重要的是函数是否失败,但它不会挂起我的应用程序。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多