C语言中的Linux树命令实现

时间:2018-05-19 14:22:39

标签: c linux tree

这不是重复,我需要在C中实现树程序,但在Stack Overflow上我只找到缩进仅由空格构成的实现,并且在进入子目录时它们不会打印管道字符


enter image description here

即使在子级别我有不同程度的缩进,我如何打印管道和空间? 而且,我怎么知道何时到达最后一个文件,以便我打印`字符而不是管道?

1 个答案:

答案 0 :(得分:0)

规则是:

  • 不要对根目录(或基本目录)使用任何缩进。

  • 从最老的父级开始,直到父级,检查父目录是否是其自己父级目录中的最后一项。 对于那些,使用进行缩进;否则,请使用

  • 如果当前项目是父目录中的最后一项,请使用└─缩进它;否则,请使用├─

在实践中,您需要扫描(并记住)目录的内容,然后才能下载到任何子目录。

如果以递归方式执行此操作,则可以使用单个动态分配的缓冲区进行缩进;它包含父目录的垂直条和空格。最后一项(带水平条)单独打印。当您执行递归调用以打印子目录的内容时,首先将空格或竖线附加到缩进字符串(取决于子目录是否是当前目录中的最后一项)。在递归调用之后,将缩进字符串修剪回原始长度。

请注意,您必须将项目的名称存储在数组或链接列表的目录中,因为在递归到任何子目录之前需要它们。如果不这样做,则无法知道某个项目是否是其目录中的最后一项,并且您无法正确执行输出。您必须动态保留名称,没有任何计数或长度限制,因为在实践中没有这样的限制。 (即使某些机器存在某些限制,它们依赖于所使用的文件系统,除非超出它们,否则不会被发现。)

我编写的测试实现,首先使用nftw()构建完整的树结构,然后将其打印出来,大约300行,包括所有错误检查。不,我不会发布它,因为它会被邪恶的学生滥用,作为他们自己的工作。