C#:使用FileSystemWatcher监视复制或移动的文件

我在这里和整个网络上遇到过几个“解决方案”,但似乎都没有符合要求。

我要做的是让app监视新文件的文件夹(通过创建,移动或复制)并对这些对象执行操作。 就是这种情况,我转向FileSystemWatcher类来执行此操作。

问题是文件FileSystemWatcher.Created事件在创建整个文件之前被触发(最明显的是通过大文件的副本看到)。

有没有办法让这个事件在文件创建结束时触发而不是从头开始? 我尝试过FileSystemWatcher.NofityFilter属性的各种组合但没有成功。

提前致谢! 🙂

我已经针对这种情况使用了几种解决方案。

  1. 如果您可以使用该文件的创建者并使用该文件的重命名方案。 例如。 在创建时将文件创建为__Name_ ,并在流程结束时将其重命名为Name ,事件将触发并且您有一个完整的文件。

  2. 触发器触发时检查是否可以对文件进行独占的只读锁定。 如果可以,则已完成对文件的写入操作。 (我在另一个问题中写了一些关于此问题的保持设置在表单应用程序和Windows服务(或任何n层,真的)之间同步 )

您可以将#2之类的内容集成到Changed Event中,然后您将获得结果。

嗯有趣的问题。 我在观看大文件时从未使用过该对象。 做了一点搜索,似乎一个解决方案是监控Changed事件。 因为一旦文件完成复制(触发创建后),也会抛出更改的事件(导致文件大小增加)

我在这里阅读的更多细节: http : //social.msdn.microsoft.com/forums/en-US/vblanguage/thread/f84bb7c8-b7d5-44da-b0f3-6d1a70415d11/

我知道,我要告诉你的并不优雅。 我还要监视从不同地方到达的文件,其中一些文件很大而且很小。 我们发现,FileSystemWatcher不可靠用于此目的。 如果你想100%确定,你可以使用Timer类及其Elapsed事件偶尔检查一次。

您需要在创建文件后跟踪文件的关闭,我怀疑FileSystemWatcher是否可以。 如果您没有找到使用FileSystemWatcher的解决方案,请查看我们的CallbackFilter产品,该产品可让您实时跟踪所有操作。