2013-10-26 50 views
0

我有代碼的所有文件夾中查找和顯示名稱在rootfolder所有子文件夾名稱:如何顯示文件夾名稱,並在下拉列表

private string[] GetFolderNames(string virtualDirPath) 
{ 
    string[] Directories; 
    if (Directory.Exists(virtualDirPath)) 
    { 
     Directories = Directory.GetDirectories(virtualDirPath); 
     for (int i = 0; i < Directories.Length; i++) 
     { 
      Directories[i] = MapUrl(Directories[i]);//map path to the folder 
     } 
     return Directories; 
    } 
    else 
    { 
     return null; 
    } 
} 

和代碼數據綁定到下拉列表:

string[] folders = GetFolderNames(RootPath); 
if (folders != null) 
{ 
    dropDownListFolders.DataSource = folders; 
    dropDownListFolders.DataBind(); 
} 
else 
{ 
    dropDownListFolders.Items.Insert(0, "No folders available.."); 
} 

如上面的代碼,Dropdownlist顯示Rootfolder中的所有文件夾名稱,路徑= virtualDirPath;

但是我想知道是否在每個子文件夾中仍然有一些子文件夾,並且在每個子文件夾中都有更多的子文件夾等等,以便我如何獲取子文件夾的所有名稱。

儘量在第一個環內製作更多的for環,但它確實讓我感到困惑。看來這不是好的方法。

我需要Dropdownlist顯示根文件夾中的所有子文件夾名稱,子文件夾的子文件夾和子文件夾的子文件...。幫幫我!我需要你的意見,找到一個更好的方法來。

回答

2
List<string> dirList = new List<string>(); 

DirectoryInfo[] dir = new DirectoryInfo(@"D:\Path").GetDirectories("*.*", SearchOption.AllDirectories); 
foreach(DirectoryInfo d in dir) 
{ 
    dirList.Add(d.Name); 
} 

for (int i = 0; i < dirList.Count; i++) 
{ 
    Console.WriteLine(dirList[i]); 
} 

試試這個,並在dirList得到所有的文件夾名稱,並將其添加到下拉列表。

+0

這麼酷,它真的幫助我。非常感謝。 –

+0

歡迎您... – super

0

使用下面的方法來獲取列表中的所有的文件夾:

public void traverse(File file, List<String> dirList) { 
    // Print the name of the entry 
    System.out.println(file); 


    // Check if it is a directory 
    if (file.isDirectory()) { 
     System.out.println(file); 
     //add directory name in the list 
     dirList.add(file.getName()); 
     // Get a list of all the entries in the directory 
     String entries[] = file.list(); 

     // Ensure that the list is not null 
     if (entries != null) { 
      // Loop over all the entries 
      for (String entry : entries) { 
       // Recursive call to traverse 
       traverse(new File(file, entry),dirList); 
      } 
     } 
    } 
} 

一旦你的目錄和子目錄的列表將其綁定與下拉。 使用下面的代碼來調用這個方法

DirectoryList directoryList = new DirectoryList(); 

    //output pram 
    ArrayList<String> dirList = new ArrayList<String>(); 

    directoryList.traverse(new File("D:\\Workspace\\Netbeans\\addapp"), dirList); 
1

如果您使用inbuild Directory.EnumerateDirectories方法,它更容易。 http://msdn.microsoft.com/de-de/library/vstudio/dd383462(v=vs.110).aspx

你只是把它像這樣:

Directory.EnumerateDirectories("rootpath", "*", SearchOption.AllDirectories); 

這會給你的所有目錄的IEnumerable(「*」)及其完整路徑。 枚舉SearchOption.AllDirectories是說你希望你的搜索是遞歸的。 根路徑是你的出發點。

另外,你可以通過延長第二paramater這樣的篩選此方法:

Directory.EnumerateDirectories("rootpath", "test*", SearchOption.AllDirectories); 

這將導致在開始測試所有目錄的IEnumerable的(「測試*」)

編輯:

您應該考慮顯示相對路徑,而不是僅顯示可能導致重複列表條目的名稱。

var directories = (from x in Directory.EnumerateDirectories("rootpath", "*", SearchOption.AllDirectories) 
        select x.SubString("rootpath".Length)).ToList(); 
+0

謝謝,但我怎樣才能得到每個文件夾的路徑 –

+0

@VyClarks?!?這就是你如何得到它,當你指定SearchOption.AllDirectories時,你正在接收它們。你的問題在哪裏? –

+0

按照你的建議。 Directory.EnumerateDirectories(「rootpath」,「*」,SearchOption.AllDirectories);返回一個文件夾的數量。但正是我想要的是所有文件夾的名稱。 –

相關問題