2009-02-18 81 views
2

我使用ReadDirectoryChangesW窥探一个文件夹,如果我复制一个大文件到文件夹,我可以接收多个FILE_ACTION_MODIFIED消息,似乎每次Windows写入一大块该文件,您将获得每次修改文件的通知。我尝试使用CreateFile API来检查文件是否可以通过AP打开,但有时某些文件总是被其他AP锁定,例如,如果打开Outlook,PST将更新,但我的AP可以无法访问它,我们必须启动Shadow Copy才能打开它。 所以我的问题是,如何知道文件完成复制?如何知道一个文件是完成复制

回答

1

这是一个非常冒险的本质的解决方案,但在非常多毛的情况下,您可以运行轮询循环来检查文件的大小(或修改日期)。如果它一段时间没有变化,你可以有点安全地假定该文件已完成复制。

编辑:这不是平均情况下的最佳解决方案,但考虑到在OP的情况下,更好的解决方案被排除在问题约束之外。在考虑下调之前,先考虑这一点。

0

当您轮询文件大小时,请勿使用_stat/_stat64。相反,每次需要时打开该文件,并致电_filelengthi64以获取文件的大小。 Windows操作系统不会实时更新_stat64返回的文件大小。另外,通过打开文件,您正在测试以查看任何长时间复制操作已完成。