我正在使用 ReadDirectoryChangesW 来监视一个文件夹,如果我将一个大文件复制到该文件夹,我可以收到多个 FILE_ACTION_MODIFIED 消息,似乎每次 Windows 写入一大块文件时,你都会收到每个文件的修改通知时间。我尝试使用 CreateFile API 来检查文件是否可以被 AP 打开,但有时,某些文件总是被其他 AP 锁定,例如,如果您正在打开 Outlook,PST 会更新,但我的 AP 可以'不要访问它,我们必须启动 Shadow Copy 才能打开它。所以我的问题是,如何知道文件已完成复制?
Yigang Wu
问问题
2986 次
3 回答
1
这是一个非常hacky性质的解决方案,但在非常棘手的情况下,您可以运行轮询循环来检查文件的大小(或修改日期)。如果它有一段时间没有改变,您可以放心地假设该文件已完成复制。
编辑:这不是一般情况下的最佳解决方案,但考虑到在 OP 的情况下,问题约束排除了更好的解决方案。在考虑否决之前考虑一下。
于 2009-02-18T03:02:20.367 回答
0
当您轮询文件的大小时,不要使用_stat/_stat64
. 相反,每次需要时打开文件并调用_filelengthi64
以获取文件的大小。_stat64
Windows 操作系统不会实时更新返回的文件大小。此外,通过能够打开文件,您正在测试是否已完成任何长复制操作。
于 2011-05-07T06:20:45.433 回答
-1
Windows 提供了一个 API 来监视目录内容更新。您可以使用 Created 事件来检测新文件,但请注意,此事件触发并不一定意味着文件已发布。
本机 C++ 规范和代码示例:
http://msdn.microsoft.com/en-us/library/aa365261(VS.85).aspx
。网 :
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx
于 2014-05-14T08:06:08.130 回答