我使用ReadDirectoryChangesW来监视的文件夹,如果我复制一个大文件的文件夹,我可以接收多个FILE_ACTION_MODIFIED的消息,似乎每一个时间窗口写一大块的文件,你会得到修改的文件通知每次。我试图用CreateFile API来检查文件是否可以通过AP或打开不,但有时,一些文件的其他AP总是被锁定,例如,如果您打开Outlook的PST将更新,但我的AP可以“T访问它,我们要开始影复制打开它。 所以我的问题是,如何知道某个文件复制完毕?

有帮助吗?

解决方案

这是一个非常哈克性质的解决方案,但在一个非常多毛情况可以运行一个轮询循环来检查文件的大小(或修改的日期)。如果不改变一会儿,你可以的有些的安全地假定文件已完成复制。

编辑:这是不是在平均情况下的最佳解决方案,但考虑到在OP的情况下更好的解决方案是由问题的制约排除。想一想你认为downvoting之前。

其他提示

在轮询文件的大小,不要使用_stat/_stat64。相反,打开该文件每次你需要时间,并呼吁_filelengthi64得到文件的大小。不是由Windows操作系统更新,实时由_stat64返回的文件大小。此外,通过能够打开该文件,如果正在测试看到,任何长时间的复制操作已经完成。

Windows提供的API来监测目录内容更新。 您可以使用创建的事件来检测新的文件,但要注意,此事件触发并不一定意味着该文件尚未公布。

本地C ++规范和代码示例:

http://msdn.microsoft.com/ EN-US /库/ aa365261(VS.85)的.aspx

达网络:

http://msdn.microsoft.com/en-我们/库/ system.io.filesystemwatcher.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top