gpt4 book ai didi

c - Linux 树命令的 C 实现

转载 作者:行者123 更新时间:2023-11-30 21:27:30 25 4
gpt4 key购买 nike

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


enter image description here

即使在子目录中我有不同级别的缩进,我如何打印管道和空格?另外,我如何知道何时到达最后一个文件,以便打印 ` 字符而不是管道?

最佳答案

规则是:

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

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

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

实际上,您需要在下降到目录的任何子目录之前扫描(并记住)目录的内容。

<小时/>

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

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

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

关于c - Linux 树命令的 C 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50426293/

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