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.