当有一个大文件移入监视文件夹时,即使在完全复制文件之前,它也会引发created
事件。
在创建的事件中复制此类文件会导致“另一个进程正在使用该文件”错误。
我使用了一个尝试复制文件的线程,直到允许这样做。但我仍然不满意。
我们是否可以配置FileSystemWatcher
,以便在文件完全复制后才会引发创建的事件?谢谢。
答案 0 :(得分:5)
documentation for the FileSystemWatcher class明确说明了您观察到的行为
通用文件系统操作可能会引发多个事件。例如,当文件从一个目录移动到另一个目录时,可能会引发几个OnChanged和一些OnCreated和OnDeleted事件。移动文件是一项复杂的操作,由多个简单操作组成,因此可以引发多个事件。同样,某些应用程序(例如,防病毒软件)可能会导致FileSystemWatcher检测到其他文件系统事件。
您可以检查是否已释放对文件的锁定,然后知道复制已完成?
答案 1 :(得分:1)
为什么不在线程完成副本时创建自己的事件?您可以指定文件并使用一个方法来处理事件以处理后期处理。
有关如何在此处创建自己的活动的详细信息:http://msdn.microsoft.com/en-us/library/5z57dxz2.aspx
因为plenderj讨论的FileSystemWatcher声明可能会触发事件,所以无法使用它。它实际上只对第一次创建也很有用,也就是第一次复制开始,然后可能会多次调用on更改。
编辑:有一个包含Windows副本的VB(仅)类。你可以在c#中使用它,因为它都是从clr运行的。这将提供Windows对话框以显示副本的进度。
http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.filesystem.copyfile.aspx
谢谢,
布拉德