配置filesystemwatcher,使其仅在文件完全复制时才引发创建的事件

当有一个大文件移入监视文件夹时,它甚至在文件完全复制之前就会引发created事件。

在创建的事件中复制此类文件会导致“另一个进程正在使用该文件”错误。

我使用了一个尝试复制文件的线程,直到允许这样做。但我仍然不满意。

我们是否可以配置FileSystemWatcher ,以便在文件完全复制后才会引发创建的事件?谢谢。

FileSystemWatcher类的文档专门说明了您观察到的行为

常见的文件系统操作可能会引发多个事件。 例如,当文件从一个目录移动到另一个目录时,可能会引发几个OnChanged和一些OnCreated和OnDeleted事件。 移动文件是一项复杂的操作,由多个简单操作组成,因此可以引发多个事件。 同样,某些应用程序(例如,防病毒软件)可能会导致FileSystemWatcher检测到其他文件系统事件。

您可以检查是否已释放对文件的锁定,然后知道复制已完成?

为什么不在线程完成副本时创建自己的事件? 您可以指定文件并使用一个方法来处理事件以处理后处理。

有关如何在此处创建自己的事件的详细信息: 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

谢谢,

布拉德