如何在下拉列表中显示文件夹名称和所有子文件夹名称

时间:2013-10-26 08:35:24

标签: c# asp.net

我有代码可以在根文件夹中查找并显示所有文件夹的名称:

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;
    }
}

代码将数据绑定到Dropdownlist:

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

如上面的代码所示,下拉列表显示Rootfolder中所有文件夹名称,路径= virtualDirPath;

但是我想知道在每个子文件夹中是否还有一些子文件夹,并且在每个子文件夹中都有更多的子文件夹等等,所以我怎样才能获得该子文件夹的所有名称。

尝试在第一个循环中制作更多for循环,但它确实让我感到困惑。而且似乎这不是好方法。

我需要Dropdownlist在rootfolder中显示所有子文件夹名称,sudfolder的子项和子文件夹的子项。救命!我需要你的意见,找到一个更好的方法。

3 个答案:

答案 0 :(得分:3)

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中的所有文件夹名称并将其添加到下拉列表中。

答案 1 :(得分: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说你希望你的搜索是递归的。 根路径是你的起点。

另外,您可以通过扩展第二个参数来过滤此方法:

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

这将导致以test(“test *”)

开头的所有目录的IEnumerable

修改

您应该考虑显示相对路径,而不是仅显示可能导致重复列表条目的名称。

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

答案 2 :(得分: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);