我正在一个项目上,我需要列出目录中的所有子目录,例如,如何列出c:\中的所有子目录
Answers:
使用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
,它将捕获异常,并仅返回该不可访问目录的空列表。然后继续到下一个子目录。
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();
}
}
}