如何在windows中实时监控目录,从程序退出到重新启动

How to monitor a directory in windows in time from the program exits to it restarts?

本文关键字:程序 退出 重新启动 windows 监控 实时      更新时间:2023-10-16

我为windows系统编写了一个音乐播放器
我添加了一个模块来监控一个名为"媒体库"的目录
它现在可以在播放器运行时读取该目录中音乐文件的更改(添加、删除、更改名称等)
当程序退出时,它显示为"自动播放列表",并将这些文件的信息保存到配置文件中。

它现在运行良好,但有一个缺陷。

当程序不运行时,我无法获得更改
再次重新扫描媒体库的目录不是一个好主意,因为它可能包含大量文件项。

那么,还有其他方法可以做到这一点吗
顺便说一下,它放在我的github中。

以下两个函数可能有用。

FindFirstChangeNotification功能

创建更改通知句柄并设置初始更改通知筛选条件。当指定的目录或子树中发生与筛选条件匹配的更改时,对通知句柄的等待将成功。函数不会报告对指定目录本身的更改。

ReadDirectoryChangesW函数

检索描述指定目录中更改的信息。函数不会报告对指定目录本身的更改。

所有现代文件系统都允许您获取文件上次修改的日期和时间信息(对于目录,这意味着我们可以获取目录内容上次修改的时间和日期)。因此,您可以使用这些信息显著提高重新扫描操作的速度。

这个想法很简单:当重新扫描时,您可以忽略目录和它的所有子目录,如果它自上次重新扫描以来没有更改的话。要获取有关上次修改目录的信息,可以使用函数GetFileTime()。

使用FindFirstChangeNotification()ReadDirectoryChanges()函数并在登录时开始的第二进程的想法(Ben Key的想法)也很好。但我怀疑您已经实现了重新扫描功能,所以提高它的速度听起来是个好主意。因此,我建议您尝试使用GetFileTime()来优化重新扫描。