我需要查找和监控硬盘驱动器或照片管理器文件夹中的所有照片。目前我正在天真地这样做:递归遍历,手动将文件夹标记为索引,并重复该过程以捕捉添加或移动照片的时间。
问题在于足够大的文件夹树,这非常昂贵,因此我正在寻找以不同方式执行此操作的技巧和/或保持其低 CPU 进程的技巧。
理想情况下,解决方案不依赖于平台。
编辑:我目前正在使用 xulrunner,但可以编译一个模块来做平台特定的东西。
第一次跑呢?除了手动运行整个文件夹树之外,是否没有解决方案(甚至取决于平台)。
我需要查找和监控硬盘驱动器或照片管理器文件夹中的所有照片。目前我正在天真地这样做:递归遍历,手动将文件夹标记为索引,并重复该过程以捕捉添加或移动照片的时间。
问题在于足够大的文件夹树,这非常昂贵,因此我正在寻找以不同方式执行此操作的技巧和/或保持其低 CPU 进程的技巧。
理想情况下,解决方案不依赖于平台。
编辑:我目前正在使用 xulrunner,但可以编译一个模块来做平台特定的东西。
第一次跑呢?除了手动运行整个文件夹树之外,是否没有解决方案(甚至取决于平台)。
理想情况下,解决方案不依赖于平台。
不可能的。Win32API 有 FindFirstChangeNotification,Linux 有 inotify(和其他),Mac OS X 有 FSEvents 等等。这是非常底层的东西,没有任何操作系统与任何其他操作系统一样。如果你想要跨平台的东西,你必须找到一个在你想要的平台上工作的具有多个后端的 API,但如果有的话,我还没有找到它们。
我不知道以独立于平台的方式执行此操作的方法,但是在 Linux 上,我会挂接到 inotify 以在添加或更新文件时调用某些内容。发生这种情况时,您甚至可以使用inotify-tools运行脚本,因此如果这些事件不频繁,您不必一直运行来捕获所有这些事件。只需让脚本更新数据库,如果它正在运行,可选择通知您的画廊/显示程序。
你在.NET上编码吗?如果是这样,您可以改用FileSystemWatcher类。
为什么不使用文件观察程序,它会通知您特定文件夹树的更改?
如果您想编写自己的代码,可以使用 FileSystemWatcher 类来完成。
截至 2014 年的一个答案是 facebook 的守望者:https ://facebook.github.io/watchman/
几年前,我将 Windows API 的一些功能移植到 Linux,例如( FindFirstChangeNotification,FindCloseChangeNotification ...) /paulorb/文件监视器