繁体   English   中英

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

[英]configuring filesystemwatcher such that it raises created event only when the file is fully copied

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

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

我使用了一个试图复制文件直到允许复制文件的线程。但是我仍然不满意。

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

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

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

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

为什么不创建自己的由线程完成复制时引发的事件? 您可以指定文件,并具有与事件相关的方法来处理后处理。

有关如何在此处创建自己的事件的详细信息: http : //msdn.microsoft.com/zh-cn/library/5z57dxz2.aspx

因为plenderj讨论的FileSystemWatcher指出可能会触发事件,所以您不能使用它。 这对于第一次创建(也就是首先开始复制)真的很有用,然后可能会多次调用on更改。

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

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

谢谢,

布拉德

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM