配置filesystemwatcher,使其仅在文件完全复制时引发created事件

本文关键字:复制 事件 created 文件 filesystemwatcher 配置 | 更新日期: 2023-09-27 18:19:38

当有一个大文件移动到关注的文件夹中时,即使在文件完全复制之前,它也会引发created事件。

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

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

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

配置filesystemwatcher,使其仅在文件完全复制时引发created事件

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

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

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

为什么不创建自己的事件,当线程完成复制时抛出该事件?您可以指定文件并使用一个方法对事件进行初始化以处理后处理。

有关如何在此处创建自己的活动的详细信息:http://msdn.microsoft.com/en-us/library/5z57dxz2.aspx

因为plenderj讨论的FileSystemWatcher声明事件可能会被触发,所以你不能使用它。它实际上只适用于第一次创建,也就是第一次开始复制,然后可能会多次调用on change。

EDIT:有一个VB(仅)类包装Windows副本。您可以在c#中使用它,因为它都是从clr中运行的。这将提供Windows对话框来显示复制的进度。

http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.filesystem.copyfile.aspx

谢谢,

Brad