[英]Wait until last file is copied with FileSystemWatcher created event
[英]configuring filesystemwatcher such that it raises created event only when the file is fully copied
当有大文件移入监视的文件夹时,即使在完全复制文件之前,它也会引发created
事件。
在创建的事件中复制此类文件会导致“文件正在被另一个进程使用”错误。
我使用了一个试图复制文件直到允许复制文件的线程。但是我仍然不满意。
我们可以配置FileSystemWatcher
使其仅在完全复制文件后引发创建的事件吗?
FileSystemWatcher类的文档专门说明了您观察到的行为
常见的文件系统操作可能会引发多个事件。 例如,当文件从一个目录移动到另一个目录时,可能会引发几个OnChanged以及一些OnCreated和OnDeleted事件。 移动文件是一个复杂的操作,由多个简单的操作组成,因此会引发多个事件。 同样,某些应用程序(例如,防病毒软件)可能会导致FileSystemWatcher检测到其他文件系统事件。
您可以检查是否已释放对该文件的锁定,然后知道复制已完成?
为什么不创建自己的由线程完成复制时引发的事件? 您可以指定文件,并具有与事件相关的方法来处理后处理。
有关如何在此处创建自己的事件的详细信息: http : //msdn.microsoft.com/zh-cn/library/5z57dxz2.aspx
因为plenderj讨论的FileSystemWatcher指出可能会触发事件,所以您不能使用它。 这对于第一次创建(也就是首先开始复制)真的很有用,然后可能会多次调用on更改。
编辑:有一个VB(仅)类包装Windows复制。 您可以在c#中使用它,因为它们都在clr之外运行。 这将提供Windows对话框以显示复制进度。
http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.filesystem.copyfile.aspx
谢谢,
布拉德
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.