ディレクトリ内のすべてのサブディレクトリを一覧表示する方法


83

私はプロジェクトに取り組んでおり、ディレクトリ内のすべてのサブディレクトリを一覧表示する必要があります。たとえば、c:\内のすべてのサブディレクトリを一覧表示するにはどうすればよいですか。

回答:


143

「your_directory_path」でDirectory.GetDirectories指定されたディレクトリのサブディレクトリを取得するために使用します。結果は文字列の配列です。

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

デフォルトでは、1レベルの深さのサブディレクトリのみが返されます。すべてを再帰的に返し、結果をフィルタリングするオプションがあります。ここに記載されており、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);

        }

リストボックスにリストを作成し、ユーザーにどのフォルダーを選択するかを許可したい場合は、はい、この回答は機能します。
MERTギュルソイ

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)

最後に追加の閉じ括弧が必要です(編集したはずですが、受け入れるには少なくとも6文字を変更/追加する必要があります)。また、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
これはC#ではなくPyhonですよね?
Tobonaut
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.