快速确定文件夹内容是否已被修改

时间:2010-07-22 21:36:58

标签: windows delphi directory change-notification datestamp

我需要确定哪些文件夹包含“最近”修改过的文件(在特定时间间隔内)。我注意到,每当修改包含的文件时,文件夹日期戳似乎都会更新,但是这种行为不会传播到树上,即包含包含修改文件的文件夹的文件夹的日期戳不会更新。

我可以处理这种行为,但我怀疑它取决于平台/文件系统/网络或本地驱动器等。我仍然希望尽可能利用它,所以我需要一个布尔函数来返回true如果运行我的应用程序的平台/磁盘支持此行为。

我很高兴通过这棵树来解决问题。我想要避免的是必须为每个文件夹中的每个文件执行FindFirst / FindNext以查看是否在最后一天修改了(如果有) - 如果我可以避免对没有修改其日期戳的文件夹执行此操作在最后一天,它将节省大量时间。

4 个答案:

答案 0 :(得分:3)

检查FindFirstChangeNotificationFindNextChangeNotification功能 另一种选择是使用TJvChangeNotify JEDI组件。

另外你可以查看这个链接

答案 1 :(得分:2)

到目前为止发布的解决方案是在发生通知时获取通知,并且它们可以很好地用于此目的。如果您想查看过去并查看最后一次更改的内容,而不是实时监控,那么它会变得棘手。我认为除非通过递归搜索文件夹树并检查日期戳,否则无法做到这一点。

编辑:为了回应OP的评论,是的,看起来没有任何方法可以将FindFirst / FindNext配置为仅命中目录而不是文件。但您可以使用此过滤器跳过检查文件的日期:(SearchRec.Attr and SysUtils.faDirectory <> 0)。这应该可以加快速度。根本不检查文件上的日期。但是,您可能仍需要扫描所有内容,因为Windows API不提供任何方式(我知道)只查询文件夹而不是文件。

答案 2 :(得分:2)

答案 3 :(得分:0)

你应该看看http://help.delphi-jedi.org/item.php?Id=172977这是一个现成的解决方案。 如果你不想下载&amp;安装整个JVCL(这是一段很棒的代码;))您可能希望在线查看文件源 - http://jvcl.svn.sourceforge.net/viewvc/jvcl/trunk/jvcl/run/JvChangeNotify.pas?revision=12481&view=markup