加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 01:51:57 所属栏目:Windows 来源:网络整理
导读:我正在编写一个工具,可以找到适用于Mac和 Windows的iTunes资料库的丢失文件.在Mac上,我可以通过使用精彩的“CatalogSearch”功能命名来快速查找文件. 但是,在Windows上,似乎没有用于按文件名搜索的OS API(或者是否存在?). 经过一些谷歌搜索,我了解到有一些
我正在编写一个工具,可以找到适用于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更快.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读