|
.NET TIPS ファイルやディレクトリの一覧を取得するには?デジタルアドバンテージ2003/08/02 |
![]() |
|
|
|
指定したディレクトリに含まれるすべてのファイルやディレクトリの名前を取得するには、Directoryクラス(System.IO名前空間)のstaticなメソッドを使用する。ファイル名の一覧はGetFilesメソッド、ディレクトリ名の一覧はGetDirectoriesメソッドにより取得することができる。また、ファイルとディレクトリの両方をまとめて取得するGetFileSystemEntriesメソッドも用意されている。
これらのメソッドの呼び出しは次のようにして行えばよい。
string[] files = Directory.GetFiles("c:\\");
string[] dirs = Directory.GetDirectories("c:\\");
string[] both = Directory.GetFileSystemEntries("c:\\");
それぞれのメソッドのパラメータには、ディレクトリの絶対パスあるいは相対パスが指定でき、いずれのメソッドも取得した結果を文字列の配列として返す。
次のサンプル・プログラムは、GetFilesメソッドとGetDirectoriesメソッドの2つを使用し、コマンドライン引数で指定されたディレクトリ以下(サブディレクトリも含む)に存在するすべてのファイルを表示する。
|
|
| 指定されたディレクトリ以下のすべてのファイルを表示するC#のサンプル・プログラム(allfile1.cs) | |
上記のサンプル・プログラムでは、サブディレクトリを走査するためにメソッドの再帰呼び出し(DoItメソッド内でさらにDoItメソッドを呼び出している)を行っている。参考までに、再帰呼び出しを行わないバージョンも示しておこう。
|
|
| 再帰呼び出しを行わずにすべてのファイルを表示するC#のサンプル・プログラム(allfile2.cs) | |
このサンプル・プログラムでは、各ディレクトリから得られたディレクトリ一覧を順に1つずつ処理していくために、ディレクトリのパス名をいったんキュー(queue)に格納している。キューの実装は、Queueクラス(System名前空間)としてライブラリで用意されている。Dequeueメソッドはキューの先頭から要素を取り出し、Enqueueメソッドはキューの末尾にデータを追加するためのものだ。
DirectoryInfoクラスの3つのメソッド
「TIPS:ディレクトリを作成/削除/リネーム/移動するには?」の最後でも解説しているように、ディレクトリを扱うクラスとしてはDirectoryクラス以外にDirectoryInfoクラス(System.IO名前空間)が用意されている。こちらはインスタンス・メソッドだけを実装したクラスで、特定のディレクトリについてインスタンスを作成してから、そのディレクトリについての操作を行う。
このDirectoryInfoクラスにも、Directoryクラスと同様に、ファイルやディレクトリの一覧を取得する3つのメソッドがあり、呼び出し方は次のようになる。
DirectoryInfo di = new DirectoryInfo("c:\\");
FileInfo[] fis = di.GetFiles();
DirectoryInfo[] dis = di.GetDirectories();
FileSystemInfo[] fsis = di.GetFileSystemInfos();
FileInfoクラス(System.IO名前空間)は、特定のファイルについての情報を表すクラスだ。また、GetFileSystemInfosメソッドは、Directory.GetFileSystemEntriesと同様に、DirectoryInfoオブジェクトの基になるディレクトリに含まれているすべてのファイルとディレクトリを、FileSystemInfoクラス(System.IO名前空間)の配列として返す。FileSystemInfoクラスは、FileInfoクラスおよびDirectoryInfoクラスの基底クラスであるため、FileSystemInfo型の配列はそのどちらのインスタンスも格納できる。
さて、Directoryクラスの代わりにDirectoryInfoクラスを使用して最初のサンプル・プログラム(allfile1.cs)を書き換えると次のようになる。
|
|
| DirectoryInfoクラスを使用してすべてのファイルを表示するC#のサンプル・プログラム(allfile3.cs) | |
FileInfoクラスのFullNameプロパティは、インスタンスの基となっているファイルの絶対パスを取得するものだ。このプロパティを使用しているため、コマンドライン引数で相対ディレクトリを指定して実行した場合には、元のサンプル・プログラムとは表示形式が少し異なっている。
ファイルやディレクトリの検索
ここまでに見てきた合計6つのメソッドは、ワイルドカード文字(*:0個以上の文字、?:1文字)を使用したパターンをメソッドのパラメータで指定することにより、対象となるディレクトリ内でファイルやディレクトリを検索することができる。
まずDirectoryクラスのメソッドでは、次のようにして検索を行える。
string[] files = Directory.GetFiles("c:\\", "*.cs");
string[] dirs = Directory.GetDirectories("c:\\", "*Microsoft*");
string[] both = Directory.GetFileSystemEntries("c:\\", "??");
この例では、上から順に、拡張子が“.cs”のファイル、“Microsoft”を含むディレクトリ、名前が2文字以内のディレクトリかファイルを、Cドライブのルート・ディレクトリから検索する。
同様に、DirectoryInfoクラスを使用する場合の記述例は次のようになる。
DirectoryInfo di = new DirectoryInfo("c:\\");
FileInfo[] fis = di.GetFiles("*.cs");
DirectoryInfo[] dis = di.GetDirectories("*Microsoft*");
FileSystemInfo[] fsis = di.GetFileSystemInfos("??");
次のサンプル・プログラムは、最初のサンプル・プログラム(allfile1.cs)をほんの少し書き換えて作成したファイル検索プログラムだ。
|
|
| ファイルの検索を行うC#のサンプル・プログラム(findfile.cs) | |
このファイル検索プログラムは、コマンドラインの第1引数に検索を開始するディレクトリを、第2引数に検索するファイルのパターン(“*.cs”など)を指定して使用する。![]()
| カテゴリ:クラス・ライブラリ 処理対象:ディレクトリ&ファイル 使用ライブラリ:Directoryクラス(System.IO名前空間) 使用ライブラリ:DirectoryInfoクラス(System.IO名前空間) 使用ライブラリ:Queueクラス(System名前空間) 使用ライブラリ:FileInfoクラス(System.IO名前空間) 使用ライブラリ:FileSystemInfoクラス(System.IO名前空間) 関連TIPS:ディレクトリを作成/削除/リネーム/移動するには? |
|
||||||||||||||||||||||||||||
| 「.NET TIPS」 |
| 更新履歴 | |||||
|
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


