我正在做一个项目,需要列出一个目录中的所有子目录。例如,我如何列出C盘中的所有子目录?
使用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
的情况,它会捕获异常并返回一个空列表表示该无法访问的目录,并继续处理下一个子目录。
就是这么简单:
string[] folders = System.IO.Directory.GetDirectories(@"C:\My Sample Path\","*", System.IO.SearchOption.AllDirectories);
使用:
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);
}
使用:
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();
}
}
}
ReadLine()
? - Peter Mortensen如果您只需要简单的文件夹列表而不是完整路径,您可以使用以下命令:
Directory.GetDirectories(parentDirectory).Select(d => Path.GetRelativePath(parentDirectory, d)
using System.IO;
private static void ListDirectories(string Path, Action<string> Listen){
try
{
foreach(string Node in Directory.GetDirectories(Path)){
Listen(Node);
ListDirectories(Node, Listen);
}
} catch {}
}
static void Main(string[] args)
{
ListDirectories(@"C:\", (dir) =>
{
Console.WriteLine(dir);
});
}
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)
}