2016-09-15 5 views
0

私は混在したクラスのフォルダでツリービューをまとめようとしています。ルートフォルダには、一つのクラスであり、サブフォルダは、このように、他のです:私は余裕だろうサブフォルダが「SubDirectoryItems」の代わりに「DirectoryItem」として検索されているので、私は2つの異なる再帰的な方法を組み合わせるしようとしてきた異なるフォルダクラスのツリービュー

Root Folder #1 <-- DirectoryItem class 
--Sub Folder <-- SubDirectoryItem class 
----file  <-- FileItem class 
Root Folder #2 <-- DirectoryItem class 
--Sub Folder <-- SubDirectoryItem class 
----file  <-- FileItem class 

そのコードは明確化の欠如のために試みますが、もっと良いアプローチがあるのだろうかと思います。

class ItemProvider 
{ 
    public List<Item> GetItems(string path, SearchOption searchOption) 
    { 
     var items = new List<Item>(); 
     var dirInfo = new DirectoryInfo(path); 

     foreach (var directory in dirInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly)) 
     { 
      var item = new DirectoryItem 
      { 
       Name = directory.Name, 
       Path = directory.FullName, 
       Items = GetItems(directory.FullName, SearchOption.AllDirectories) 
      }; 

      items.Add(item); 
     } 

     foreach (var subdirectory in dirInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly)) 
     { 
      var item = new SubDirectoryItem() 
      { 
       Name = subdirectory.Name, 
       Path = subdirectory.FullName, 
       Items = GetItems(subdirectory.FullName, SearchOption.AllDirectories) 
      }; 

      items.Add(item); 
     } 

     foreach (var file in dirInfo.GetFiles()) 
     { 
      var item = new FileItem 
      { 
       Name = file.Name, 
       Path = file.FullName 
      }; 

      items.Add(item); 
     }  

     return items; 
    } 

} 

}

+0

ここでは混乱しています。あなたは何を探していますか?特定の時点で1つのサブフォルダ(サブフォルダ内に他のフォルダがないようなレベル)のみが存在すると仮定していますか?本質的に;サブフォルダはディレクトリ項目でもあります。 – A3006

+0

いいえ、(パス)のすべての最上位のフォルダを1つのディレクトリクラスタイプにしたいとします。その下にあるものは、ツリーレベルがどれほど深いものであっても、ファイルまたはサブフォルダクラスタイプでなければなりません。私のツリービューでは、トップレベルのディレクトリにはボタンやあらゆる種類のものがあり、データトリガーやivalueconvertersなどのxamlで区別するよりも、これをよりクリーンな方法で行うと考えています。 – ctalley5

答えて

0

私はそれを把握することができました。最初のリストTopDirectoryOnlyを作成し、残りのアイテムをAllDirectoriesの2番目のリストから取得しました。他の初心者(私のような)に役立つ場合のコードは次のとおりです。

class ItemProvider 
{ 
    public List<Item> GetItems(string path, SearchOption searchOption) 
    { 
     var items = new List<Item>(); 
     var dirInfo = new DirectoryInfo(path); 

     foreach (var directory in dirInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly)) 
     { 
      var item = new DirectoryItem 
      { 
       Name = directory.Name, 
       Path = directory.FullName, 
       Items = GetSubItems(directory.FullName, SearchOption.AllDirectories) 
      }; 

      items.Add(item); 
     } 

     return items; 
    } 

    public List<Item> GetSubItems(string path, SearchOption searchOption) 
    { 
     var items = new List<Item>(); 
     var dirInfo = new DirectoryInfo(path); 


     foreach (var subdirectory in dirInfo.GetDirectories("*.*", SearchOption.AllDirectories)) 
     { 
      var item = new SubDirectoryItem() 
      { 
       Name = subdirectory.Name, 
       Path = subdirectory.FullName, 
       Items = GetSubItems(subdirectory.FullName, SearchOption.AllDirectories) 
      }; 

      items.Add(item); 
     } 

     foreach (var file in dirInfo.GetFiles()) 
     { 
      var item = new FileItem 
      { 
       Name = file.Name, 
       Path = file.FullName 
      }; 

      items.Add(item); 
     } 

     return items; 
    } 

} 
関連する問題