我在这里和整个网络上遇到过几个“解决方案”,但似乎没有一个适合该法案。
我要做的是让应用程序监视新文件的文件夹(通过创建,移动或复制)并对这些对象执行操作。就是这种情况,我转向FileSystemWatcher类来执行此操作。
问题是文件FileSystemWatcher.Created事件在创建整个文件之前被触发(最明显是通过大文件的副本看到的)。
是否有任何方法可以在文件创建结束时触发此事件而不是从头开始?我尝试过FileSystemWatcher.NofityFilter属性的各种组合但没有成功。
提前致谢! :)
答案 0 :(得分:6)
我已经针对这种情况使用了几种解决方案。
如果您可以使用文件的创建者并对文件使用重命名方案。例如。在创建时将文件创建为 __名称_ ,并在流程结束时将其重命名为 名称 ,该事件将触发并且您已完成文件
当触发器触发时,检查是否可以对文件进行独占的只读锁定。如果可以,则已完成对文件的写入操作。 (我在另一个问题Keep settings in sync between forms application and windows service (or any n-tier, really))
您可以将类似#2的内容集成到您的Changed事件中,然后您将获得结果。
答案 1 :(得分:1)
嗯有趣的问题。我在观看大文件时从未使用过该对象。做了一点搜索,似乎一个解决方案是监控Changed事件。因为一旦文件完成复制(触发创建后),也会抛出更改的事件(导致文件大小增加)
我在此处阅读的更多细节:http://social.msdn.microsoft.com/forums/en-US/vblanguage/thread/f84bb7c8-b7d5-44da-b0f3-6d1a70415d11/
答案 2 :(得分:1)
我知道,我要告诉你的并不优雅。我还要监控从不同地方到达的文件,其中一些文件很大而且很小。我们发现,FileSystemWatcher不可靠用于此目的。如果你想100%确定,你可以使用Timer类及其Elapsed事件偶尔检查一次。
答案 3 :(得分:0)
您需要在文件创建后跟踪文件的关闭,我怀疑FileSystemWatcher是否可以。 如果您没有找到使用FileSystemWatcher的解决方案,请查看我们的CallbackFilter产品,该产品可让您实时跟踪所有操作。