递归文件夹创建

时间:2014-01-09 22:51:23

标签: c# .net recursion

我坐着一个我似乎无法完成的脑筋急转弯。我正在尝试创建一个特定的文件夹结构。这里解释了结构:

在指定的根文件夹中,应用程序应创建10个文件夹,“0” - “10”。在其中的每一个中,应该再次是文件夹'0' - '10'等。这必须继续用户定义的级别。

使用for循环,到目前为止我已经设法得到了这个,但可以想象一个递归函数看起来不那么混乱,但同时融化我的大脑试图找出它D:

static void Main(string[] args)
       {
            string basePath = Path.Combine(Environment.CurrentDirectory, "Lib");

            for (int a = 0; a < 10; a++)
            {
                CreateFolders(basePath);
                basePath = Path.Combine(basePath, a.ToString());

                for (int b = 0; b < 10; b++)
                {
                    CreateFolders(basePath);
                    basePath = Path.Combine(basePath, b.ToString());

                    for (int c = 0; c < 10; c++)
                    {
                        CreateFolders(basePath);
                        basePath = Path.Combine(basePath, c.ToString());

                        for (int d = 0; d < 10; d++)
                        {
                            CreateFolders(basePath);
                            basePath = Path.Combine(basePath, d.ToString());

                            basePath = Helpers.DirMoveBack(basePath);
                        }
                        basePath = Helpers.DirMoveBack(basePath);
                    }
                    basePath = Helpers.DirMoveBack(basePath);
                }
                basePath = Helpers.DirMoveBack(basePath);
            }

            Console.ReadLine();
       }

// Creates folders '0' - '9' in the specified path
static void CreateFolders(string path)
    {
        for (int a = 0; a < 10; a++)
        {
            Directory.CreateDirectory(string.Format("{0}\\{1}", path, a));
            Console.WriteLine(string.Format("{0}\\{1}", path, a));
        }
    }


public static class Helpers
    {

        // Moves the directory back one step
        public static string DirMoveBack(string path)
        {
            for (int a = path.Length - 1; a > 0; a--)
                if (path[a] == '\\')
                    return path.Substring(0, a);

            return path;
        }
    }

正如你所看到的,这是非常混乱的。如果您运行代码,它将创建所需的文件夹结构,但我希望它以递归方式完成。我试图扩大我的思维方式,这似乎是一个真正的脑筋急转弯。任何帮助将不胜感激

2 个答案:

答案 0 :(得分:5)

是的,递归更短:)适合任何类似于树结构的东西:

    static void Main(string[] args) {
        CreateFolders(3, "c:\\temp\\temp");
    }

    static void CreateFolders(int depth, string path) {
        if (depth <= 0) return;
        for (int ix = 0; ix <= 10; ++ix) {
            var dir = Path.Combine(path, ix.ToString());
            System.IO.Directory.CreateDirectory(dir);
            CreateFolders(depth - 1, dir);
        }
    }

答案 1 :(得分:4)

这是一个非常简单的系统,可以递归地为x级别创建0-10个文件夹。导致图片中列出的结构。这个概念非常简单,该方法调用自身传递pathdepth参数。如果path是根路径,则应在该递归级别创建文件夹,depth是要创建的其余子文件夹。您将注意到每次递归调用时depth参数减1,直到等于零。在零处,递归停止。

static void Main(string[] args)
{
    int maxDepth = 5;
    string initialPath = @"D:\testFolders";
    createFolders(initialPath, maxDepth);
}

static void createFolders(string path, int depth)
{
    depth--;
    for (int i = 0; i <= 10; i++)
    {
        string directory = Path.Combine(path, i.ToString());
        if (!Directory.Exists(directory))
            Directory.CreateDirectory(directory);
        if (depth > 0)
            createFolders(directory, depth);
    }
}

enter image description here