我使用ReadDirectoryChangesW窥探一个文件夹,如果我复制一个大文件到文件夹,我可以接收多个FILE_ACTION_MODIFIED消息,似乎每次Windows写入一大块该文件,您将获得每次修改文件的通知。我尝试使用CreateFile API来检查文件是否可以通过AP打开,但有时某些文件总是被其他AP锁定,例如,如果打开Outlook,PST将更新,但我的AP可以无法访问它,我们必须启动Shadow Copy才能打开它。 所以我的问题是,如何知道文件完成复制?如何知道一个文件是完成复制
2
A
回答
1
这是一个非常冒险的本质的解决方案,但在非常多毛的情况下,您可以运行轮询循环来检查文件的大小(或修改日期)。如果它一段时间没有变化,你可以有点安全地假定该文件已完成复制。
编辑:这不是平均情况下的最佳解决方案,但考虑到在OP的情况下,更好的解决方案被排除在问题约束之外。在考虑下调之前,先考虑这一点。
0
当您轮询文件大小时,请勿使用_stat/_stat64
。相反,每次需要时打开该文件,并致电_filelengthi64
以获取文件的大小。 Windows操作系统不会实时更新_stat64
返回的文件大小。另外,通过打开文件,您正在测试以查看任何长时间复制操作已完成。
0
Windows提供了一个API来监视目录内容更新。 您可以使用Created事件检测新文件,但请注意,此事件触发并不一定意味着该文件尚未发布。
本地C++规范和代码例如:
http://msdn.microsoft.com/en-us/library/aa365261(VS.85).aspx
.NET:
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx