我正在编写一个工具,可以找到适用于Mac和Windows的iTunes资料库的丢失文件。在Mac上,我可以通过使用精彩的“CatalogSearch”功能命名来快速查找文件。
但是,在Windows上,似乎没有用于按文件名搜索的OS API(或者是否存在?)。
经过一些谷歌搜索,我了解到有些工具(如 TFind , Everything )直接读取NTFS目录并扫描它以按名称查找文件。
我想做同样的事情,但不必从头开始(虽然我过去写了很多磁盘工具,但我从来没有精力去挖掘NTFS)。
我想知道是否有现成的库,可能是.dll,它会给我这个搜索功能:传入一个文件名,然后回到它的路径。
或者,Windows索引服务怎么样?至少当我在最近安装的XP Home系统上尝试此操作时, Start 菜单下的 Search 操作实际上会扫描所有目录,这表明它没有完整的数据库。由于我根本不是Windows用户,我想知道为什么这不起作用。
最后,我需要的完整的解决方案是:我有一个要查找的文件名列表,我需要搜索整个磁盘的代码(或使用数据库来获取)我一结果一个接一个。例如,搜索不应该为我正在查找的每个文件启动新的完整扫描。这就是为什么我认为MFT方式是最优的,因为它可以快速迭代所有名称,将每个名称与我的列表进行比较。
答案 0 :(得分:5)
解决问题的最佳方法似乎是使用Windows Change Journal。
问题:如果没有为卷启用或者卷是非NTFS,则需要回退(或者如果它是NTFS则启用更改日志)。您还需要管理员权限才能访问“更改日记”。
使用FSCTL_ENUM_USN_DATA和DeviceIOControll以及LowUsn = 0获取文件。这直接访问MFT并将所有文件名写入提供的缓冲区。因为它顺序访问MFT,所以它比FindFirstFile API更快。