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

C# 配置filesystemwatcher,使其仅在完全复制文件时引发created事件,c#,.net,io,filesystemwatcher,C#,.net,Io,Filesystemwatcher,当有一个大文件移动到关注的文件夹中时,甚至在文件完全复制之前,它也会引发created事件 在创建的事件中复制此类文件会导致“其他进程正在使用文件”错误 我使用了一个线程,试图复制文件,直到它被允许这样做。但我仍然不满意 我们能否将FileSystemWatcher配置为仅在完全复制文件后才会引发创建的事件?谢谢 特别说明您观察到的行为 常见文件系统操作可能引发多个事件。例如,当文件从一个目录移动到另一个目录时,可能会引发几个OnChanged事件以及一些OnCreated和OnDeleted事

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

在创建的事件中复制此类文件会导致“其他进程正在使用文件”错误

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

我们能否将
FileSystemWatcher
配置为仅在完全复制文件后才会引发创建的事件?谢谢

特别说明您观察到的行为

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


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

为什么不创建自己的事件,在线程完成复制时引发该事件?您可以指定该文件,并使用一个对事件进行lisens的方法来处理后期处理

有关如何在此处创建自己的活动的详细信息:

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

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

谢谢


Brad

解决此问题的典型方法是尝试在触发事件的文件上获取独占锁。如果无法获得锁,请等待它再次触发。它不能仅在文件完全复制后引发created事件。这不是它的工作方式。正如@plenderj从FileSystemWatcher上的文档中复制的一样,这是已知的和预期的行为。