VB.NETでファイル一覧を取得する方法!(Directory.GetFiles)

VB.NET

VB.NETでプログラムを作成していると、フォルダ内にあるファイル一覧を取得したい場面はよくあります。

例えば、次のようなケースです。

  • フォルダ内のログファイルをすべて処理したい
  • 指定フォルダにある画像ファイルだけを一覧表示したい
  • CSVファイルをまとめて読み込みたい
  • バックアップ対象のファイルを列挙したい

このようなときに便利なのが、Directory.GetFilesメソッドです。

この記事では、下記の内容を解説します。

  • Directory.GetFiles の基本的な使い方
  • 拡張子を指定して取得する方法
  • サブフォルダを含めて取得する方法
  • よくある注意点(例外・存在チェック)

Directory.GetFilesとは?

Directory.GetFilesは、指定したフォルダ内に存在するファイルのパス一覧を取得するメソッドです。

System.IO.Directory.GetFiles(フォルダパス)

戻り値はString()(文字列配列)で、各要素には「ファイルのフルパス」が格納されます。

基本的な使い方(フォルダ内の全ファイルを取得)

まずは、指定したフォルダ内のすべてのファイルを取得する例です。

Imports System.IO

Module Module1
    Sub Main()
        Dim folderPath As String = "C:\Sample"

        Dim files() As String = Directory.GetFiles(folderPath)

        For Each file As String In files
            Console.WriteLine(file)
        Next
    End Sub
End Module

folderPath変数にファイル一覧を取得したいフォルダパスを格納しています。
その次の処理で、Directory.GetFilesを使ってファイル一覧を取得し、ループで出力しています。

実行結果例

実際に出力結果を確認すると、下記のように出力されます。

C:\Sample\test1.txt
C:\Sample\test2.csv
C:\Sample\image.png

👉 ファイル名だけでなく、フルパスが取得される点に注意しましょう。

特定の拡張子だけ取得する方法(検索パターン)

Directory.GetFiles では、検索パターン(ワイルドカード)を指定できます。
検索パターンを指定することで、検索パターンに合うファイル一覧のみ取得できます。

例:.txt ファイルだけ取得

Dim files() As String = Directory.GetFiles("C:\Sample", "*.txt")

第2引数に、このように指定します。
上記の例では「*.txt」ファイル一覧のみ取得しています。

よく使うパターン例

目的 指定例
CSVファイル "*.csv"
画像ファイル "*.png" / "*.jpg"
すべて "*.*"

デフォルトで全て取得されるので、「すべて」の指定は基本的に使うことがないと思います。

サブフォルダも含めて取得する方法

デフォルトでは、Directory.GetFilesは指定フォルダ直下のみを対象にします。
フォルダがあっても取得した一覧では無視されます。

サブフォルダも含めたい場合は、第3引数に SearchOption.AllDirectoriesを指定します。

Dim files() As String = Directory.GetFiles(
    "C:\Sample",
    "*.txt",
    SearchOption.AllDirectories
)

これで、サブフォルダも対象にファイル一覧が取得できます。
注意点として、フォルダ数・ファイル数が多い場合、処理に時間がかかることがあります。

ファイル名だけを取得したい場合

取得できるのはフルパスなので、ファイル名だけ使いたい場合はPath.GetFileNameを使用します。

Imports System.IO

Dim folderPath As String = "C:\Sample"
Dim files() As String = Directory.GetFiles(folderPath, "*.txt", SearchOption.AllDirectories)

For Each file As String In files
    Dim fileName As String = Path.GetFileName(file)
    Console.WriteLine(fileName)
Next

このように取得したファイル一覧のファイルパスに対して、Path.GetFileNameを使うことでファイル名を取得できます。
実際に出力内容を確認すると、下記のようにファイル名だけ取得できました。

aaa.txt
bbb.txt
hoge.txt

フォルダが存在しない場合の対処(例外対策)

指定したフォルダが存在しないと、Directory.GetFilesは例外をスローします。

そのため、事前に存在チェックを行うのがおすすめです。

If Directory.Exists(folderPath) Then
    Dim files() As String = Directory.GetFiles(folderPath)
Else
    Console.WriteLine("フォルダが存在しません")
End If

このようにDirectory.Existsを使うことで、フォルダパスのフォルダが存在するときだけ、フォルダ配下のファイル一覧を取得することができます。
または、Try...Catch を使う方法もあります。

Directory.GetFilesのエラー・注意点

よくあるエラーと注意点です。

フォルダが存在しない

  • DirectoryNotFoundExceptionが発生

アクセス権限がない

  • UnauthorizedAccessExceptionが発生

大量ファイルの取得

  • メモリ・処理速度に注意
  • 必要なら EnumerateFilesを検討

まとめ

この記事では、VB.NETでファイル一覧を取得する方法を確認しました。

ポイントを整理すると、

  • Directory.GetFiles でフォルダ内のファイル一覧を取得できる
  • 拡張子指定・サブフォルダ指定が可能
  • 戻り値は「フルパスの配列」
  • 事前の存在チェック・例外対策が重要

ファイル処理を行うプログラムでは、非常によく使われる基本メソッドなので、ぜひ覚えておきましょう。

コメント