"Everything Search" 如何在不到 10 秒的时间内为我的 4TB HDD 提供可立即搜索的 20 亿个文件列表?
How exactly "Everything Search" can give me immediately searchable list of 2bln files on my 4TB HDD in less than 10 seconds?
windows 程序 "Everything Search" http://www.voidtools.com/ 读取 NTFS 卷的文件名的速度比我假设的更快(它读取 4TB HDD 上近 20 亿个文件的文件名)不到 10 秒)。
我知道它可能直接批量读取卷的 NTFS 文件夹结构,并且在不调用 OS 文件系统函数的情况下理解它。
具体怎么做?我应该调用哪些系统函数来快速获取有关 NTFS 卷的信息,以及如何将其解析为文件名和目录名?是否有任何语言的图书馆对此有帮助?
如果你不确定我在问什么,我之前的问题中有更多细节(我被要求重新措辞):Can I read whole NTFS directory tree into RAM at once?
NTFS 卷具有它所依赖的低可见性结构,称为主文件 table。有用于直接查询此 table 的 API,但它们需要一些权限才能调用,因为您必须获得该卷的句柄。 main函数查询主文件table为DeviceIOControl,控制码为FSCTL_ENUM_USN_DATA
控制代码似乎是与 USN 相关的代码——在这种特殊情况下有点误导——但它会给出调用和相关结构的基本风格。您会返回一个记录枚举,这些记录 看起来像 usn 记录,但它们是主文件 table 条目的薄包装。
每个记录都有文件名、ID 和父 ID。 FileNames 是文件或文件夹的 "local" 名称,要获得全名,您需要遍历 table 结构。
它快如闪电 - 比通过文件系统递归快得多。您将返回(并且必须过滤掉)任何普通文件 API 中未公开的内容 - 例如,您绝对不想向用户公开的内容。
windows 程序 "Everything Search" http://www.voidtools.com/ 读取 NTFS 卷的文件名的速度比我假设的更快(它读取 4TB HDD 上近 20 亿个文件的文件名)不到 10 秒)。
我知道它可能直接批量读取卷的 NTFS 文件夹结构,并且在不调用 OS 文件系统函数的情况下理解它。
具体怎么做?我应该调用哪些系统函数来快速获取有关 NTFS 卷的信息,以及如何将其解析为文件名和目录名?是否有任何语言的图书馆对此有帮助?
如果你不确定我在问什么,我之前的问题中有更多细节(我被要求重新措辞):Can I read whole NTFS directory tree into RAM at once?
NTFS 卷具有它所依赖的低可见性结构,称为主文件 table。有用于直接查询此 table 的 API,但它们需要一些权限才能调用,因为您必须获得该卷的句柄。 main函数查询主文件table为DeviceIOControl,控制码为FSCTL_ENUM_USN_DATA
控制代码似乎是与 USN 相关的代码——在这种特殊情况下有点误导——但它会给出调用和相关结构的基本风格。您会返回一个记录枚举,这些记录 看起来像 usn 记录,但它们是主文件 table 条目的薄包装。
每个记录都有文件名、ID 和父 ID。 FileNames 是文件或文件夹的 "local" 名称,要获得全名,您需要遍历 table 结构。
它快如闪电 - 比通过文件系统递归快得多。您将返回(并且必须过滤掉)任何普通文件 API 中未公开的内容 - 例如,您绝对不想向用户公开的内容。