VB.NET フォルダ内にあるファイルの一覧を取得する
フォルダ内にあるファイルの一覧を取得するにはDirectory.GetFilesを使用します。
例えば以下のフォルダとファイルがあるとします。
- C:
- work1
- テキスト1.txt
- テキスト2.txt
- 帳票1.xls
- subwork1
- サブテキスト1.txt
- サブテキスト2.txt
- サブ帳票1.xls
- work2
- テキスト3.txt
- テキスト4.txt
- 帳票2.xls
- work1
このとき、C:\work1フォルダ内にあるテキストファイル(拡張子が.txtのファイル)を全て取得したい場合は以下のようにします。
For Each filepath As String In Directory.GetFiles("C:\work1", "*.txt", SearchOption.TopDirectoryOnly)
Console.WriteLine(filepath)
Next
'実行結果
'C:\work1\テキスト1.txt
'C:\work1\テキスト2.txtDirectory.GetFiles
Directory.GetFiles(検索するフォルダ, フィルタ, サブディレクトリを含めるかどうか)で指定します。
N Directory.GetFilesの名前空間はSystem.IOなので、コンパイルエラーになってしまう場合はvbファイルの先頭にImports System.IOを追加するか、Directory.GetFilesの代わりにSystem.IO.Directory.GetFilesとしてください。
ワイルドカードでフィルタ
第2引数で取得するファイルをワイルドカード(*や?)でフィルタをすることができます。
*と指定すれば、任意の0文字以上が対象となるため、全てのファイルを取得します。
For Each filepath As String In Directory.GetFiles("C:\work1", "*", SearchOption.TopDirectoryOnly)
Console.WriteLine(filepath)
Next
'実行結果
'C:\work1\テキスト1.txt
'C:\work1\テキスト2.txt
'C:\work1\帳票1.xls今回の場合は拡張子が.txtのファイルのみを取得したいため、*.txt(ファイル名の末尾が.txtで終わるファイル)を指定しています。
サブディレクトリの扱い
第3引数では、サブディレクトリを含めるかどうかを指定できます。
現在のディレクトリのみ取得する場合はTopDirectoryOnlyを指定し、サブディレクトリも含めて取得する場合はAllDirectoriesを指定します。
上記の例で、C:\work1の中にあるサブディレクトリ(subwork1)の中にあるファイルも含めて取得したい場合は以下のようにします。
For Each filepath As String In Directory.GetFiles("C:\work1", "*.txt", SearchOption.AllDirectories)
Console.WriteLine(filepath)
Next
'実行結果
'C:\work1\テキスト1.txt
'C:\work1\subwork1\サブテキスト1.txt
'C:\work1\subwork1\サブテキスト2.txt
'C:\work1\テキスト2.txtファイルではなくフォルダの一覧を取得する方法はVB.NET フォルダ内にあるフォルダ一覧を取得するで紹介しています。