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