hakeの日記

Windows環境でプログラミングの勉強をしています。

C# - ディレクトリ内一覧の取得

Directoryクラスの静的メソッドを使用することで、全て、ファイルのみ、サブディレクトリのみと取得できる。またワイルドカードを使用して特定もののみを取得することも可能である。
全てを取得した場合は、ディレクトリかファイルかの区別はFile.GetAttributes() でAttributesを取得し、HasFlag() メソッドでディレクトリフラグが立っているかで判定する。HasFlag() メソッドは、FileAttributes Enumの上位クラスであるEnumクラスで定義されている。

対象ディレクトリの構成

C:\>dir /B c:\test
Dir1A
Dir1B
Dir2A
Dir2B
File1.txt
File2.docx
FIle3.txt
File4.docx

 

using System;
using System.IO;

//ディレクトリ内一覧

class MyMain
{
    static void Main(string[] args)
    {
        string path = @"c:\test";

        //対象ィレクトりの存在確認
        Console.WriteLine(Directory.Exists(path));

        //サブディレクトリ一覧を取得
        var dirs = Directory.GetDirectories(path);
        Console.WriteLine("\nディレクトリ一覧");
        foreach(var d in dirs)
        {
            Console.WriteLine(d);
        }
        //サブディレクトリ一覧をコレクションとして取得(ワイルドカード)
        Console.WriteLine("\nディレクトリ一覧(*A)");
        foreach(var d in Directory.EnumerateDirectories(path, "*A") )
        {
            Console.WriteLine(d);
        }
        //ファイル一覧を取得(ワイルドカード)
        Console.WriteLine("\nファイル一覧(*.txt)");
        var files = Directory.GetFiles(path, "*.txt");
        foreach(var f in files)
        {
            Console.WriteLine(f);
        }
        //ファイル一覧をコレクションとして取得
        Console.WriteLine("\nファイル一覧");
        foreach(var f in Directory.EnumerateFiles(path) )
        {
            Console.WriteLine(f);
        }
        //ファイル/ディレクトリ一覧を取得
        Console.WriteLine("\nファイル/ディレクトリ一覧");
        var children = Directory.GetFileSystemEntries(path);
        foreach(var c in children)
        {
            Console.Write(c);
            if(File.GetAttributes(c).HasFlag(FileAttributes.Directory))
            {
                Console.WriteLine(" is Directory.");
            }
            else
            {
                Console.WriteLine(" is File.");
            }
        }
    }
}

 

実行結果

True

ディレクトリ一覧
c:\test\Dir1A
c:\test\Dir1B
c:\test\Dir2A
c:\test\Dir2B

ディレクトリ一覧(*A)
c:\test\Dir1A
c:\test\Dir2A

ファイル一覧(*.txt)
c:\test\File1.txt
c:\test\File3.txt

ファイル一覧
c:\test\File1.txt
c:\test\File2.docx
c:\test\File3.txt
c:\test\File4.docx

ファイル/ディレクトリ一覧
c:\test\Dir1A is Directory.
c:\test\Dir1B is Directory.
c:\test\Dir2A is Directory.
c:\test\Dir2B is Directory.
c:\test\File1.txt is File.
c:\test\File2.docx is File.
c:\test\File3.txt is File.
c:\test\File4.docx is File.