从最内层到最外层目录查找文件(递归)

时间:2014-11-06 06:06:10

标签: c# recursion

我正在尝试搜索给定目录中的文件。 我必须从最里面的目录中找到该文件,如果没有找到,则递归遍历1步。

Ex:迭代1:     搜索文件:D:\ Folder1 \ Folder2 \ Folder3 \ Folder4

Ex:迭代2:     搜索文件:D:\ Folder1 \ Folder2 \ Folder3 \

Ex:迭代3:     搜索文件:D:\ Folder1 \ Folder2 \

我的代码:

private string findTheFile(string path)
    {

        string[] files = Directory.GetFiles(path, "filename.txt", SearchOption.TopDirectoryOnly);

        if (files.Length == 1)
            return files[0].ToString();    //File found, return the file's path.
        else
            findTheFile(Path.GetDirectoryName(path));// File not found, recursively search the parent folder.

        return null; // Return null if file not found.
    }

发生了什么:  代码在一定程度上起作用,意味着找到了文件位置。但是不是返回值,控件继续到else部分。

当我出错时请指导我。

提前致谢!!

2 个答案:

答案 0 :(得分:0)

试试这个,你应该返回递归方法的结果:

private string findTheFile(string path)
    {

        string[] files = Directory.GetFiles(path, "filename.txt", SearchOption.TopDirectoryOnly);

        if (files.Length == 1)
            return files[0].ToString();
        else
            return findTheFile(Path.GetDirectoryName(path)); /* You should return your result here */

        return null;
    }

如果您未返回findTheFile方法的结果,则会返回null值。

答案 1 :(得分:0)

我不知道你的意思"继续其他部分"。但是如果您按照以下方式解决问题,您的代码应该可以运行:

private string findTheFile(string path)
{
    if (string.IsNullOrEmpty(path))
    {
        return null;
    }

    string[] files = Directory.GetFiles(path, "filename.txt", SearchOption.TopDirectoryOnly);

    if (files.Length == 1)
        return files[0];    //File found, return the file's path.

    return findTheFile(Path.GetDirectoryName(path)); // File not found, recursively search the parent folder.
}