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\subwork3
Directory.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 フォルダ内にあるファイルの一覧を取得するで紹介しています。