2012-02-10 4 views
0

私は、* .exeとUserGeneratedContentという名前のフォルダが同じディレクトリにあるシンプルでポータブルなシングルフォームアプリケーションを開発しています。自分のフォーム上に、UserGeneratedContentのすべてのサブフォルダ(存在する場合)に対応するノードを設定するツリービューがあります。私は以下に貼り付けたコードはほとんど私がそれを望むように動作しますが、それは、ルートノードとしてUserGeneratedContentでツリービューを移入し、ひいてはそれが子ノードとして見つかったサブフォルダなどツリービュー最初のサブフォルダからルートおよびすべてのノードを派生させる方法 - 正しいパスを指定する方法

string folder = @"UserGeneratedContent"; 
FolderHierachy.Nodes.Add(GetDirectoryNodes(folder)); 

private static TreeNode GetDirectoryNodes(string path) 
{ 
    var node = new TreeNode(Path.GetFileName(path)); 
    var subDirs = Directory.GetDirectories(path).Select(d => GetDirectoryNodes(d)).ToArray(); 

    node.Nodes.AddRange(subDirs); 
    return node; 
} 
を扱います

この段階では、@ "UserGeneratedContent"のすべての組み合わせを試してみました。バックスラッシュなどを追加して、サブフォルダにアクセスしようとしましたが、運がないと思います。おそらく単純なことが分かっていますが、私は固執しています。上記の方法でUserGeneratedContentがサブフォルダを取得する正しい構文は何ですか?

さらに、ツリービューコントロールでは、ユーザーが任意の階層のフォルダを作成、名前変更、削除できるようにしたいので、この点でベストプラクティスとは何か考えていますか?

編集\アップデート#1 - 2012年2月12日:

は多くの試行錯誤の後、私は上記のコードをあきらめている - に関係なく、私が試した私が、それが何らかの理由で仕事を得ることができませんでした。幸いなことに、以下のコードは

DirectoryInfo dirInfo = new DirectoryInfo(@"UserGeneratedContent"); 
DirectoryInfo[] subDirs = dirInfo.GetDirectories(); 

string pathToSubFolders = Path.Combine(@"UserGeneratedContent", subDirs[0].ToString()); 

PopulateTreeView(treeView1, pathToSubFolders); 

private void PopulateTreeView(TreeView treeView, string path) 
{ 
    treeView.Nodes.Clear(); 
    var rootDirectoryInfo = new DirectoryInfo(path); 
    treeView.Nodes.Add(CreateDirectoryNode(rootDirectoryInfo)); 
} 

private static TreeNode CreateDirectoryNode(DirectoryInfo directoryInfo) 
{ 
    var directoryNode = new TreeNode(directoryInfo.Name);   
    foreach(var directory in directoryInfo.GetDirectories()) 
    { 
      directoryNode.Nodes.Add(CreateDirectoryNode(directory)); 
    } 

    return directory; 
} 

:-)私のために完璧に働いている私は、サブフォルダが「UserGeneratedContent」@の下にそこにいるん可能にするために、それにコードを扱ういくつかのエラーを追加する必要がある - それはsubDirs[0].ToString()あるとして投げますIndexOutOfRangeException - サブフォルダが存在しない場合、どうすればよいかわからないので、いくつかのポインタに感謝します。

編集\更新#2 - 2012年2月12日:

私のエラーのために、私は以下のようにtry-catchブロックを使用しましたチェック:

try 
{ 

    string pathToSubFolders = Path.Combine(dirInfo.ToString(), subDirs[0].ToString()); 

    PopulateTreeView(treeView1, pathToSubFolders); 

} 
catch (IndexOutOfRangeException) 
{ 

      //Do Something Here 

} 

上記のコードは動作しますが、誰もが言うことができます私はこれについて正しい方法で行ったら私に?

読んでいただきありがとうございます。あなたは他の解決策はまだ見つかっていない場合

答えて

2

、簡単な方法は次のようになります。

if(subDirs.Lenght != 0)  // or > 0 
{ 
    string pathToSubFolders = Path.Combine(dirInfo.ToString(), subDirs[0].ToString()); 
    PopulateTreeView(treeView1, pathToSubFolders); 
} 
else 
{ 
    //Do Something Here 
} 
関連する問題