我正在尝试创建一个迭代器,它对特定文件夹中的所有文件和文件夹执行广度优先遍历。我已经使用深度优先遍历完成了这项工作,例如:
\A
\A\1
\A\1\x
\A\1\y
\A\2
\B
\B\1
等
现在我正在尝试创建一个程序,它将返回结果广度优先:(或逐级)
\A
\B
\A\1
\A\2
\B\1
\A\1\x
\A\1\y
用于相同的层次结构。但是,我遇到了一个绊脚石:假设我希望这些以正确的顺序发生(具体而言,不是相反的顺序),我找不到任何方法来执行此操作而不需要最终O(n)内存,其中 n 是驱动器上文件/文件夹的数量,因为在我看来,我最终需要保留整个驱动器层次结构在某些时候内存,而对于DFS,我可以完全忽略我先前在层次结构中同一级别枚举的所有条目。
所以我的问题是:是否有一种比线性更好的方式来使用内存来遍历文件夹?
答案 0 :(得分:3)
如果您的平台支持inode number
的概念,您可以为每个目录存储单个号码,以指示您为该特定目录访问的最大inode号。如果按数字顺序访问inode,跟踪单个条目将足以知道“下一个”条目的位置。
这是一个小小的收获,因为您仍然需要为系统上的每个目录维护一个inode编号,但您不需要关心目录的内容。 / p>
当然,请记住,任何遍历机制都会遇到可怕的竞争条件,您必须保证文件系统处于静止状态,或者您的代码对于删除,创建,移动的目录/文件具有弹性等等,而你的代码正在进行中。