在NTFS卷上快速find一组文件名,最好是通过MFT

我正在编写一个工具,查找Mac和Windows的iTunes资料库的丢失文件。 在Mac上,我可以使用精彩的“CatalogSearch”function快速find文件。

然而,在Windows上,似乎没有用于通过文件名进行search的OS API(或者在那里?)。

一些谷歌search后,我了解到有工具(如TFindEverything )直接读取NTFS目录并扫描它以查找名称的文件。

我也想这样做,但不必从头开始(尽pipe我过去已经写了不less的磁盘工具,但我从来没有精力去挖掘NTFS)。

我想知道是否有作为一个.dll,可以作为一个.dll的现成的库,这会给我这个searchfunction:传入一个文件名,找回它的path。

或者,Windows索引服务呢? 至less当我在最近安装的XP Home系统上试过这个时, 开始菜单下的search操作实际上会扫描所有目录,这表明它没有完整的数据库。 由于我不是Windows用户,我想知道为什么这不起作用。

最后,我需要的完整解决scheme是:我有一个要查找的文件名列表,我需要search整个磁盘(或使用数据库)的代码,以便一次性获得所有结果。 例如,search不应该为我正在查找的每个文件启动新的全面扫描。 这就是为什么我认为MFT的方式是最佳的,因为它可以快速迭代所有名称,比较每个名单。

Solutions Collecting From Web of "在NTFS卷上快速find一组文件名,最好是通过MFT"

解决您的问题的最好方法似乎是通过使用Windows更改日记。

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

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