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

时间:2012-01-04 20:51:06

标签: c# .net io filesystemwatcher

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

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

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

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

2 个答案:

答案 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

谢谢,

布拉德