저는 프로젝트를 진행 중이며 디렉토리의 모든 하위 디렉토리를 나열해야합니다. 예를 들어 c : \의 모든 하위 디렉토리를 나열하려면 어떻게해야합니까?
답변:
"your_directory_path"로Directory.GetDirectories
지정된 디렉토리의 하위 디렉토리를 가져 오는 데 사용 합니다 . 결과는 문자열 배열입니다.
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();
}
}
}
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)
}