如何在Delphi XE中监视文件的目录?

axi*_*oft 7 delphi directory monitoring file delphi-xe

可能重复:
文件更新时的Delphi通知

需要监视创建文件并对其进行计数.操作系统:WinXP和高.

Rob*_*ank 7

去年我有同样的需求并尝试了Iztok Kacin的目录观察:http://www.cromis.net/blog/downloads/directory-watch/ .他回复了电子邮件,对回答我的问题非常有帮助.

他的代码工作正常,但我需要在特定文件夹中的文件被关闭的时候得到通知,由于某些奇怪的原因,来自Microsoft(疯狂地)的ReadDirectoryChanges API(它依赖于它)不提供.我似乎还记得,Iztok的代码使用了线程,并没有足够的重量来满足我的需求.

我最终使用了一种非常简单的方法,对我来说非常有效.在每隔几秒触发的TTimer事件上,我在我正在监视的文件夹上使用FindFirst.找到的所有文件都放在持久的TStringList中.找到的任何文件都不是以前TTimer事件的StringList中的新文件.(为了检测文件是否关闭,我尝试以独占模式打开文件.如果我无法打开它,那么它不会被添加到TStringList中,所以它会在下一个事件中被检查.)

我对使用这种方法非常犹豫,认为它太过暴力.但是,为了满足我的需求,这个解决方案非常好用,幸运的是,它包含了一些易于理解和维护的非常简单的代码.

HTH

  • 请注意该库中有一个小错误。您需要在 TDirWatchThread.Execute 中添加 Terminate(在 SignalError(ErrorMessage) 之后) - 如果没有这个,当您从文件夹中删除所有文件然后删除文件夹本身时,它会进入无限循环! (2认同)

yms*_*yms 6

您可能需要查看本文(适用于Delphi的目录监视器类),以及Windows API中的此功能:ReadDirectoryChanges

您还应该看一下这个问题,因为它可能符合您的需求:文件更新时的Delphi通知