8

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

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

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

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

提前致谢!:)

4

4 回答 4

6

对于这种情况,我使用了几种解决方案。

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

  2. 当您的触发器触发时,检查您是否可以获得文件的独占只读锁定。如果可以,则对文件的写入操作已完成。(我在另一个问题Keep settings in sync between forms application and windows service (or any n-tier, really)中写了一些关于此的内容)

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

于 2010-08-09T00:45:36.803 回答
1

我知道,我要告诉你的东西看起来并不优雅。我还必须监视来自不同地方的文件,其中一些很大,一些很小。我们发现,FileSystemWatcher 对此不可靠。如果您想 100% 确定,可以不时检查一次,使用 Timer 类及其 Elapsed 事件。

于 2010-08-09T07:16:34.340 回答
1

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

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

于 2010-08-09T00:22:04.943 回答
0

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

于 2010-08-09T07:06:44.540 回答