如何在windows中实时监控目录,从程序退出到重新启动
How to monitor a directory in windows in time from the program exits to it restarts?
我为windows系统编写了一个音乐播放器
我添加了一个模块来监控一个名为"媒体库"的目录
它现在可以在播放器运行时读取该目录中音乐文件的更改(添加、删除、更改名称等)
当程序退出时,它显示为"自动播放列表",并将这些文件的信息保存到配置文件中。
它现在运行良好,但有一个缺陷。
当程序不运行时,我无法获得更改
再次重新扫描媒体库的目录不是一个好主意,因为它可能包含大量文件项。
那么,还有其他方法可以做到这一点吗
顺便说一下,它放在我的github中。
以下两个函数可能有用。
FindFirstChangeNotification功能
创建更改通知句柄并设置初始更改通知筛选条件。当指定的目录或子树中发生与筛选条件匹配的更改时,对通知句柄的等待将成功。函数不会报告对指定目录本身的更改。
ReadDirectoryChangesW函数
检索描述指定目录中更改的信息。函数不会报告对指定目录本身的更改。
所有现代文件系统都允许您获取文件上次修改的日期和时间信息(对于目录,这意味着我们可以获取目录内容上次修改的时间和日期)。因此,您可以使用这些信息显著提高重新扫描操作的速度。
这个想法很简单:当重新扫描时,您可以忽略目录和它的所有子目录,如果它自上次重新扫描以来没有更改的话。要获取有关上次修改目录的信息,可以使用函数GetFileTime()。
使用FindFirstChangeNotification()
和ReadDirectoryChanges()
函数并在登录时开始的第二进程的想法(Ben Key的想法)也很好。但我怀疑您已经实现了重新扫描功能,所以提高它的速度听起来是个好主意。因此,我建议您尝试使用GetFileTime()
来优化重新扫描。
- boost::asio::io_service 在线程中,不会在应用程序退出时退出
- 当我选择大于 720 的矩阵大小时,程序退出并显示错误代码.可能是什么原因?
- thread_local静态类在程序退出时在无效地址处销毁
- OpenGL 应用程序退出,退出代码为 -1073741515 (0xC0000135)
- 程序退出后,将释放内存到系统
- 全局范围内的对象会导致程序退出时崩溃
- 不整洁的程序退出:MFC C
- 如果程序退出循环是goto已删除的本地变量
- Linux 阻止文件描述符在程序退出时关闭
- 为什么我的新分配指针会自动在程序退出上删除
- QFile在程序退出时保存文件,根本不会保存~500MB文件
- 类的静态实例无法在程序退出时正确处理资源删除
- 为什么全局或静态对象会导致程序退出时崩溃
- 由OpenCV 2.4.6创建的AVI文件在应用程序退出时并不总是有效
- C++DevIL函数ilLoadImage-程序退出,访问违规
- gdb程序退出了使用CMake的程序的代码01
- 问题5.1-QMessageBox错误?如果在QDialog隐藏时调用了QMessageBox,则程序退出(0)
- 多次调用函数会导致程序退出,并出现一个神秘的错误
- 如何在应用程序退出时诊断comptr版本中的异常
- C++-如何在程序退出时找到堆/堆栈损坏的源