如何列出目录中的所有子目录


83

我正在一个项目上,我需要列出目录中的所有子目录,例如,如何列出c:\中的所有子目录

Answers:


143

使用Directory.GetDirectories获得由指定的目录的子目录“your_directory_path”。结果是一个字符串数组。

var directories = Directory.GetDirectories("your_directory_path");

默认情况下,该操作仅返回一级子目录。有一些选项可以递归地返回所有结果并过滤结果,这些记录在此处,并在Clive的答案中显示。


避免UnauthorizedAccessException

UnauthorizedAccessException如果您打到一个您无权访问的目录,很可能会得到一个。

您可能必须创建自己的方法来处理异常,如下所示:

public class CustomSearcher
{ 
    public static List<string> GetDirectories(string path, string searchPattern = "*",
        SearchOption searchOption = SearchOption.AllDirectories)
    {
        if (searchOption == SearchOption.TopDirectoryOnly)
            return Directory.GetDirectories(path, searchPattern).ToList();

        var directories = new List<string>(GetDirectories(path, searchPattern));

        for (var i = 0; i < directories.Count; i++)
            directories.AddRange(GetDirectories(directories[i], searchPattern));

        return directories;
    }

    private static List<string> GetDirectories(string path, string searchPattern)
    {
        try
        {
            return Directory.GetDirectories(path, searchPattern).ToList();
        }
        catch (UnauthorizedAccessException)
        {
            return new List<string>();
        }
    }
}

然后这样称呼它:

var directories = CustomSearcher.GetDirectories("your_directory_path");

这将遍历目录及其所有子目录。如果它碰到了一个无法访问的子目录,则抛出了UnauthorizedAccessException,它将捕获异常,并仅返回该不可访问目录的空列表。然后继续到下一个子目录。


60

如此简单:

string[] folders = System.IO.Directory.GetDirectories(@"C:\My Sample Path\","*", System.IO.SearchOption.AllDirectories);

超级解决方案!
Majedur Ra​​haman

7
FolderBrowserDialog fbd = new FolderBrowserDialog();

        DialogResult result = fbd.ShowDialog();

        string[] files = Directory.GetFiles(fbd.SelectedPath);
        string[] dirs = Directory.GetDirectories(fbd.SelectedPath);

        foreach (string item2 in dirs)
        {
            FileInfo f = new FileInfo(item2);

            listBox1.Items.Add(f.Name);

        }

        foreach (string item in files)
        {
            FileInfo f = new FileInfo(item);

            listBox1.Items.Add(f.Name);

        }

如果您想在列表框中列出并允许用户选择哪个文件夹,是的,此答案有效。
MertGülsoy2015年

5
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TRIAL
{
    public class Class1
    {
        static void Main(string[] args)
        {
           string[] fileArray = Directory.GetDirectories("YOUR PATH");
           for (int i = 0; i < fileArray.Length; i++)
           {

               Console.WriteLine(fileArray[i]);
           }
            Console.ReadLine();
        }
    }
}

0

要只获取没有完整路径的简单文件夹列表,可以使用:

Directory.GetDirectories(parentDirectory).Select(d => Path.GetRelativePath(parentDirectory, d)

在末尾需要一个额外的结束括号(将对其进行编辑,但是需要更改\至少添加六个字符才能被接受)。还要注意,您需要安装.NET Standard 2.1才能使用Path.GetRelativePath
StuKay,

-1

显示所有目录和子目录

def dir():

from glob import glob

dir = []

dir = glob("path")

def all_sub_dir(dir):
{

     for item in dir:

            {
                b = "{}\*".format(item)
                dir += glob(b)
            }
         print(dir)
}

3
这是Pyhon,不是C#,不是吗?
Tobonaut
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.