.NET TIPS

ファイルやディレクトリをすべてのサブディレクトリから検索するには?[2.0のみ、C#、VB]

デジタルアドバンテージ 遠藤 孝信
2007/01/26

 「TIPS:ファイルやディレクトリの一覧を取得するには?」では、指定したディレクトリにあるファイル/ディレクトリを返すメソッドとして、以下の2つのクラス(いずれもSystem.IO名前空間)のメソッドを紹介した(カッコ内は指定可能なパラメータの意味)。

■Directoryクラスのメソッド

  • GetFiles(対象ディレクトリ)
  • GetFiles(対象ディレクトリ, 検索パターン)
  • GetDirectories(対象ディレクトリ)
  • GetDirectories(対象ディレクトリ, 検索パターン)

■DirectoryInfoクラスのメソッド

  • GetFiles()
  • GetFiles(検索パターン)
  • GetDirectories()
  • GetDirectories(検索パターン)

 これらに加えて.NET Framework 2.0では、パラメータとしてSearchOption列挙体(System.IO名前空間)の値を指定する、以下のようなメソッドが追加されている。

■Directoryクラスに追加されたメソッド

  • GetFiles(対象ディレクトリ, 検索パターン, SearchOption列挙体の値)
  • GetDirectories(対象ディレクトリ, 検索パターン, SearchOption列挙体の値)

■DirectoryInfoクラスに追加されたメソッド

  • GetFiles(検索パターン, SearchOption列挙体の値)
  • GetDirectories(検索パターン, SearchOption列挙体の値)

 SearchOption列挙体(System.IO名前空間)では次の2つの値が定義されている。

説明
AllDirectories すべてのサブディレクトリも検索する
TopDirectoryOnly 指定されたディレクトリのみを検索する(既存の機能と同じ動作)
SearchOption列挙体で定義されている値

 このように、GetFilesメソッドやGetDirectoriesメソッドでパラメータとして「SearchOption.AllDirectories」を指定するだけで、指定したディレクトリだけでなく、その配下のすべてのサブディレクトリから検索パターンにマッチしたファイルやディレクトリを検索できるようになった。

 前掲のTIPSの最後では、指定したディレクトリから指定した検索パターンのファイルを再帰的に検索するサンプル・プログラム「findfile.cs」を示しているが、本稿で紹介した新しいメソッドを使うと、次のようにメソッドを一度呼び出すだけで済む。

// findfile2.cs

using System;
using System.IO;

public class FildFile {

  static void Search(string dir, string file) {

    string[] files = Directory.GetFiles(
      dir, file, SearchOption.AllDirectories);

    foreach (string s in files) {
      Console.WriteLine(s);
    }
  }

  static void Main(string[] args) {

    if (args.Length != 2) return;

    Search(args[0], args[1]);
  }
}

// コンパイル方法:csc findfile2.cs
//     実行例:findfile2 c:\ *.cs
ファイルの検索を行うC#のサンプル・プログラム(findfile2.cs)

' findfile2.vb

Imports System
Imports System.IO

Public Class FildFile

  Shared Sub Search(ByVal dir As String, ByVal file As String)

    Dim files As String() = Directory.GetFiles( _
      dir, file, SearchOption.AllDirectories)

    For Each s As String in files
      Console.WriteLine(s)
    Next
  End Sub

  Shared Sub Main(ByVal args As String())

    If args.Length <> 2 Then Return

    Search(args(0), args(1))
  End Sub
End Class

' コンパイル方法:vbc findfile2.vb
'     実行例:findfile2 c:\ *.vb
ファイルの検索を行うVBのサンプル・プログラム(findfile2.vb)

 すべてのファイルの検索が完了するまで結果が表示されないという挙動の違いはあるが、こちらのバージョンでは再帰呼び出しが行われないのでスタック・オーバーフローの心配はない。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:クラス・ライブラリ 処理対象:ディレクトリ&ファイル
使用ライブラリ:Directoryクラス(System.IO名前空間)
使用ライブラリ:DirectoryInfoクラス(System.IO名前空間)
使用ライブラリ:SearchOption列挙体(System.IO名前空間)
関連TIPS:ファイルやディレクトリの一覧を取得するには?

この記事と関連性の高い別の.NET TIPS
ファイルやディレクトリの一覧を取得するには?
ファイルやディレクトリの一覧を効率的に取得するには?
ディレクトリを作成/削除/リネーム/移動するには?
ディレクトリが空かどうかを調べるには?
ファイルやディレクトリのサイズを取得するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間