gpt4 book ai didi

c++ - "Everything Search"究竟如何能在不到 10 秒的时间内为我提供 4TB 硬盘上 20 亿个文件的可立即搜索列表?

转载 作者:行者123 更新时间:2023-11-28 06:05:06 25 4
gpt4 key购买 nike

Windows 程序“Everything Search”http://www.voidtools.com/通过递归下降,读取 NTFS 卷的文件名的速度比我想象的更快(它在不到 10 秒的时间内读取 4TB 硬盘上近 20 亿个文件的文件名)。

我知道它可能直接批量读取卷的 NTFS 文件夹结构,并且在不调用操作系统文件系统函数的情况下理解它。

具体怎么做呢?我应该调用哪些系统函数来快速获取有关 NTFS 卷的信息,以及如何将其解析为文件名和目录名?是否有任何语言的图书馆对此有帮助?

如果您不确定我在问什么,我之前的问题中有更多详细信息(我被要求重新措辞):Can I read whole NTFS directory tree into RAM at once?

最佳答案

NTFS 卷有一个低可见度的结构,它依赖于主文件表。有用于直接查询此表的 API,但它们需要一些权限才能调用,因为您必须获得该卷的句柄。查询主文件表的main函数是DeviceIOControl,控制代码是FSCTL_ENUM_USN_DATA

控制代码似乎是与 USN 相关的代码——在这种特殊情况下有点误导——但它会给出调用和相关结构的基本风格。您会返回一个记录枚举,它们看起来像 usn 记录,但它们是围绕主文件表条目的薄包装。

每个记录都有文件名、ID 和父 ID。 FileNames 是文件或文件夹的“本地”名称,要获得全名,您需要遍历表结构。

它快如闪电 - 比通过文件系统递归快得多。您将返回(并且必须过滤掉)任何普通文件 API 中未公开的内容 - 例如,您绝对不想向用户公开的内容。

关于c++ - "Everything Search"究竟如何能在不到 10 秒的时间内为我提供 4TB 硬盘上 20 亿个文件的可立即搜索列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32552353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com