0

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

所以对于这样的文件树:

mydir
   mysubdir
       mysubsubdir
           file1
           file2
   file1
   mysubdir2
       file2

我想在搜索 file1 时打印它:

mydir
    mysubdir
        mysubdir
            file1
    file1

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

4

1 回答 1

0

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

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

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

于 2021-03-30T11:51:51.860 回答