在NTFS卷上快速查找一组文件名,最好通过其MFT

时间:2010-11-17 10:44:45

标签: windows filesystems ntfs ntfs-mft

我正在编写一个工具,可以找到适用于Mac和Windows的iTunes资料库的丢失文件。在Mac上,我可以通过使用精彩的“CatalogSearch”功能命名来快速查找文件。

但是,在Windows上,似乎没有用于按文件名搜索的OS API(或者是否存在?)。

经过一些谷歌搜索,我了解到有些工具(如 TFind Everything )直接读取NTFS目录并扫描它以按名称查找文件。

我想做同样的事情,但不必从头开始(虽然我过去写了很多磁盘工具,但我从来没有精力去挖掘NTFS)。

我想知道是否有现成的库,可能是.dll,它会给我这个搜索功能:传入一个文件名,然后回到它的路径。

或者,Windows索引服务怎么样?至少当我在最近安装的XP Home系统上尝试此操作时, Start 菜单下的 Search 操作实际上会扫描所有目录,这表明它没有完整的数据库。由于我根本不是Windows用户,我想知道为什么这不起作用。

最后,我需要的完整的解决方案是:我有一个要查找的文件名列表,我需要搜索整个磁盘的代码(或使用数据库来获取)我一结果一个接一个。例如,搜索不应该为我正在查找的每个文件启动新的完整扫描。这就是为什么我认为MFT方式是最优的,因为它可以快速迭代所有名称,将每个名称与我的列表进行比较。

1 个答案:

答案 0 :(得分:5)

解决问题的最佳方法似乎是使用Windows Change Journal。

问题:如果没有为卷启用或者卷是非NTFS,则需要回退(或者如果它是NTFS则启用更改日志)。您还需要管理员权限才能访问“更改日记”。

使用FSCTL_ENUM_USN_DATA和DeviceIOControll以及LowUsn = 0获取文件。这直接访问MFT并将所有文件名写入提供的缓冲区。因为它顺序访问MFT,所以它比FindFirstFile API更快。