DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

DOBON.NET

あるフォルダ以下にあるファイルをすべて取得する

.NET Framework 1.1以前

フォルダ内のすべてのファイルを取得するにはDirectory.GetFilesメソッドを使用します。また、フォルダ内のすべてのファイルとサブフォルダ名を取得するには、Directory.GetFileSystemEntriesメソッドを使用します。ただしこれらのメソッドでは、サブフォルダのファイルやフォルダを取得することはできません。

以下に示すGetAllFilesメソッドは、指定されたフォルダ以下にあるすべてのファイル(ワイルドカード指定ができます)を取得するものです。

[VB.NET]
''' <summary>
''' 指定されたフォルダ以下にあるすべてのファイルを取得する
''' </summary>
''' <param name="folder">ファイルを検索するフォルダ名。</param>
''' <param name="searchPattern">ファイル名検索文字列
''' ワイルドカード指定子(*, ?)を使用する。</param>
''' <param name="files">見つかったファイル名のリスト</param>
Public Sub GetAllFiles(ByVal folder As String, _
        ByVal searchPattern As String, ByRef files As ArrayList)
    'folderにあるファイルを取得する
    Dim fs As String() = _
        System.IO.Directory.GetFiles(folder, searchPattern)
    'ArrayListに追加する
    files.AddRange(fs)

    'folderのサブフォルダを取得する
    Dim ds As String() = System.IO.Directory.GetDirectories(folder)
    'サブフォルダにあるファイルも調べる
    Dim d As String
    For Each d In ds
        GetAllFiles(d, searchPattern, files)
    Next d
End Sub
[C#]
/// <summary>
/// 指定されたフォルダ以下にあるすべてのファイルを取得する
/// </summary>
/// <param name="folder">ファイルを検索するフォルダ名。</param>
/// <param name="searchPattern">ファイル名検索文字列
/// ワイルドカード指定子(*, ?)を使用する。</param>
/// <param name="files">見つかったファイル名のリスト</param>
public static void GetAllFiles(
    string folder, string searchPattern, ref ArrayList files)
{
    //folderにあるファイルを取得する
    string[] fs =
        System.IO.Directory.GetFiles(folder, searchPattern);
    //ArrayListに追加する
    files.AddRange(fs);

    //folderのサブフォルダを取得する
    string[] ds = System.IO.Directory.GetDirectories(folder);
    //サブフォルダにあるファイルも調べる
    foreach (string d in ds)
        GetAllFiles(d, searchPattern, ref files);
}

次にGetAllFilesメソッドの使い方を示します。ここではフォルダ""以下にあるすべてのファイルのフルパスをリストボックス(ListBox1)に表示しています。

[VB.NET]
Dim files As New ArrayList
'"C:\My Documents"以下のファイルをすべて取得
GetAllFiles("C:\My Documents", "*.*", files)
'ListBox1に結果を表示する
ListBox1.Items.AddRange(files.ToArray())
[C#]
ArrayList files = new ArrayList();
//"C:\My Documents"以下のファイルをすべて取得
GetAllFiles(@"C:\My Documents", "*.*", ref files);
//ListBox1に結果を表示する
ListBox1.Items.AddRange(files.ToArray());

.NET Framework 2.0以降

.NET Framework 2.0からは、GetFilesメソッドですべてのサブフォルダを取得できます。このとき、3番目のパラメータにSearchOption.AllDirectoriesを指定します。

以下の例を示します。上の例と同じ事を行っています。

[VB.NET]
'"C:\My Documents"以下のファイルをすべて取得
Dim files As String() = System.IO.Directory.GetFiles( _
    "C:\My Documents", "*", System.IO.SearchOption.AllDirectories)
'ListBox1に結果を表示する
ListBox1.Items.AddRange(files)
[C#]
//"C:\My Documents"以下のファイルをすべて取得
string[] files = System.IO.Directory.GetFiles(
    "C:\\My Documents", "*", System.IO.SearchOption.AllDirectories);
//ListBox1に結果を表示する
ListBox1.Items.AddRange(files);

なお、VB.NETではMy.Computer.FileSystem.GetFilesメソッドでも同様のことができます。

  • 履歴:
  • 2007/2/19 .NET Framework 2.0に関する記述を追加。