ASP.NET C#列出目录结构到列表框中

时间:2014-09-22 19:20:10

标签: c# asp.net file-io

我想列出所有文件夹及其子文件夹及其子文件夹,直到达到最深的文件夹。

我写过这样的方法:

public void scanFolders(string path)
{
    foreach (var dir in new DirectoryInfo(path).GetDirectories("*", SearchOption.AllDirectories))
    {
        listBox_Folders.Items.Add(dir.Name);
    }
}

这给我带来了所有文件夹和子文件夹。没关系

但我需要一个不同的解决方案。我想列出其父项下面的文件夹的子文件夹,以连字符( - )开头。

应该看起来像

<select>
    <option>folder1</option>
    <option>-subfolder11</option>
    <option>folder2</option>
    <option>-subfolder21</option>
    <option>-subfolder22</option>
</select>

我拥有的是

<select>
    <option>folder1</option>
    <option>folder2</option>
    <option>subfolder11</option>
    <option>subfolder21</option>
    <option>subfolder22</option>
</select>

2 个答案:

答案 0 :(得分:1)

尝试在迭代前按FullName添加排序。

    foreach (var dir in new DirectoryInfo(path)
        .GetDirectories("*", SearchOption.AllDirectories)
        .OrderBy(d => d.FullName))
    {
        listBox_Folders.Items.Add(dir.Name);
    }

答案 1 :(得分:1)

您可以使用递归

    private void ScanFolder(String prefix, String path)
    {
        foreach (var dir in new DirectoryInfo(path).GetDirectories("*", SearchOption.TopDirectoryOnly))
        {
            listBox_Folders.Items.Add(prefix + dir.Name);

            ScanFolder(prefix + "-", dir.FullName);
        }
    }

首先调用ScanFolder(String.Empty, 'yourpathhere');