2014-01-09 28 views
5

私は完了することができない脳のお誘いをして座っています。私は特定のフォルダ構造を作成しようとしています。構造はここで説明されます:再帰的なフォルダの作成

指定されたルートフォルダで、アプリケーションは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; 
     } 
    } 

ご覧のとおり、これはかなり面倒です。コードを実行すると、目的のフォルダ構造が作成されますが、再帰的に実行する必要があります。私の考え方を広げようとしている私は、本当の脳のお誘いのようです。すべてのヘルプは大幅に

+0

私はそれを実現することができますが、0-10はない10 11個のフォルダ、作る:それは唯一の第九のフォルダが作成されますので、条件は<10である – evanmcdonnal

+0

Oで、またはあなたが再帰について話していますか?私はiterationが理想的かもしれないと知っていますが、再帰を使って動作するように思えます。そして、0から0→0→(0→9) (0 - > 9)、ステップ1を戻って、私が思うルートの9番目のフォルダに戻るまで?私はちょうどそれがうまくいく方法について興味があります:) –

答えて

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); 
     } 
    } 
+0

非常に素敵な答え.. :) – Nico

+0

これはまさに私が欲しかったです。これはすばらしいです、迅速な入力のために多くの感謝:D –

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