2013-05-30 81 views
0

我試圖找到一種方法從選定的目錄中檢索子文件夾。我在我的代碼中使用了FolderBrowserDialog,讓所有用戶選擇程序將要使用的「根」目錄。但我堅持如何從中獲取子目錄。我想將這些子目錄字符串名稱放在數組中以便稍後使用。我嘗試使用Directory.getFiles(「所選路徑」),但是這不顯示子目錄。 任何幫助,非常感謝!謝謝C#從選定的目錄中檢索子目錄

private void Folderselector_Click(object sender, EventArgs e) 
    { 
     FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog(); 
     if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) 
     { 
      listView1.Items.Clear(); 
      string[] files = Directory.GetFiles(folderBrowserDialog1.SelectedPath); 
      foreach (string file in files) 
      { 
       string fileName = Path.GetFileNameWithoutExtension(file); 
       ListViewItem item = new ListViewItem(fileName); 
       item.Tag = file; 
       listView1.Items.Add(item); 
      } 
     } 
    } 
+0

使用'Directory.GetDirectories(yourRootPath);' –

回答

1

這樣的事情?

var dirs = new DirectoryInfo(path).GetDirectories("*",SearchOption.AllDirectories) 
       .Select(d => d.FullName) 
       .ToList(); 

,如果你想要的目錄名稱相對於你的根目錄

var dirs = new DirectoryInfo(path).GetDirectories("*",SearchOption.AllDirectories) 
       .Select(d => d.FullName) 
       .Select(s => new Uri(path).MakeRelative(new Uri(s)).ToString()) 
       .ToList(); 
0

關閉,但有一個不同的方法來目錄:

System.IO.Directory.GetDirectories(string rootDirectory); 
+1

這不包括子子目錄.... – I4V

+0

有它,謝謝你是這個問題 –

+0

難道你不能只是再次運行這個得到sub-sbu目錄? –

1

使用方法重載與SearchOption。 AllDirectories

0
System.IO.Directory.GetDirectories(string rootDirectory); 

遞歸是您的解決方案

List<string> dirsResult = new List<string>(); 
public void GetDirectories(string currentDirectory) 
{ 
    string[] directories = Directory.GetDirectories(currentDirectory); 
    foreach(var dir in directories) 
    { 
     dirsResult.Add(dir); 
     GetDirectories(dir); 
    } 
} 

我沒有測試過,但這樣的事情應該工作。

+0

您不必手動執行此操作,將'SearchOption.AllDirectories'傳遞給'Directory.GetDirectories'就可以做到這一點,正如其他答案所述。 – I4V