从文件路径列表构建目录树

时间:2010-03-15 05:09:48

标签: performance directory tree

我正在寻找一种时间有效的方法来将文件列表解析为树。可能有数亿个文件路径。

强力解决方案是在发生目录分隔符时拆分每个路径,并通过字符串比较遍历添加目录和文件条目的树,但这将非常慢。

输入数据通常按字母顺序排序,因此列表类似于:

  

C:\用户\亚伦\应用程序数据\ Amarok的\å文件

     

C:\用户\亚伦\应用程序数据\ Amarok的\ Afile2

     

C:\用户\亚伦\应用程序数据\ Amarok的\ Afile3

     

C:\用户\亚伦\应用程序数据\搅拌机\ alibrary.dll

     

C:\用户\亚伦\应用程序数据\搅拌机\ and_so_on.txt

从这个顺序来看,我的自然反应是将目录列表分成组...以某种方式......在进行慢速字符串比较之前。我真的不确定。我很感激任何想法。

编辑:如果可能的话,如果这棵树从上到下延迟加载会更好。

3 个答案:

答案 0 :(得分:1)

您别无选择,只能进行完整的字符串比较,因为您无法保证字符串可能会有所不同。有一些技巧可能会加快一点:

  • 正如大卫所说,形成一棵树,但是从前一个插入点搜索新的插入点(可能借助某种matchingPrefix例程来告诉你新的插入点在哪里。
  • 如果内部可能包含很多文件,则需要为树的每个级别使用哈希表,并且需要计算重复项。 (否则,附加到堆栈就可以了。)

答案 1 :(得分:0)

如果可能,您可以使用tree命令生成树结构,here

答案 2 :(得分:0)

要利用输入数据的“通常排序”属性,请在插入最后一个文件的目录中开始遍历:将当前路径名的目录名与前一个路径名进行比较。如果它们匹配,您只需插入此处,否则弹出一个级别并再试一次。