繁体   English   中英

如何仅打印递归 function 中找到的文件的文件树?

[英]How to print the file tree of only the found files in a recursive function?

我有一个递归 function 搜索给定文件名的路径。 我要做的是打印匹配的文件及其父目录。

所以对于这样的文件树:

mydir
   mysubdir
       mysubsubdir
           file1
           file2
   file1
   mysubdir2
       file2

我想在搜索 file1 时打印它:

mydir
    mysubdir
        mysubdir
            file1
    file1

我能够看到每个找到的文件的路径,所以我想从这些路径构造一棵新树,然后打印那棵树,但在我看来,必须有一个更简单的方法。

您的 function 需要从根目录到您正在处理的当前目录的路径。 例如,通过const char **参数和 append 每次下降一个目录(如果您不喜欢recalloc或确保预先确保足够大的大小,则为链表)。 当匹配时,您可以打印从根目录开始的路径(但请参见下文)。

要获得 mydir/file1 的快捷行为,您需要上一个匹配的路径。 这可能是另一个const char **参数。 打印规则现在被细化为缩进与先前匹配和当前匹配具有公共路径元素一样多的级别,然后从当前匹配打印剩余的唯一路径。 这意味着深度优先搜索和按排序顺序访问子目录。

除了像 go 一样打印之外,您还可以按照@wildplasser 的建议将每个匹配记录在 const char *** 或树中。 然后使用相同的改进打印算法循环/遍历结果(如果您使用树,您只需要知道级别而不是前缀路径)。 如果您不进行深度优先搜索,您可以使用这种方法对数组进行排序。 如果你用一棵树来存储结果,你先走深度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM