我想列出所有文件夹及其子文件夹及其子文件夹,直到达到最深的文件夹。
我写过这样的方法:
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>
答案 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');