如何在递归函数中仅打印找到的文件的文件树?

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

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

所以对于这样的文件树:

mydir
   mysubdir
       mysubsubdir
           file1
           file2
   file1
   mysubdir2
       file2

我想在搜索 file1 时打印这个:

mydir
    mysubdir
        mysubdir
            file1
    file1

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

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

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

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