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