VB.NETでファイル一覧を取得する方法を完全ガイド!初心者でもわかるDirectory.GetFiles
生徒
「フォルダーの中にたくさんの写真や書類が入っているのですが、これをVB.NETで一気に調べる方法はありますか?」
先生
「それなら、Directory.GetFilesという命令を使えば、フォルダー内のファイル名を全部まとめて教えてもらうことができますよ。」
生徒
「一つずつ手で調べる必要がないんですね!でも、ファイルがたくさんあっても大丈夫でしょうか?」
先生
「はい、何百個あっても大丈夫です。プログラミングの得意分野ですからね。具体的な使い方をマスターしましょう!」
1. Directory.GetFilesとは?フォルダー内の中身を知る魔法
パソコンを操作するとき、特定のフォルダーの中にどんなファイルが入っているかを確認したい場面は非常に多いですよね。VB.NETでこの「ファイル名の一覧を取得する」という作業を自動化するために使われるのが、Directory.GetFiles(ディレクトリ・ゲットファイルズ)という命令です。ディレクトリとは、普段皆さんが「フォルダー」と呼んでいるもののプログラミングの世界での呼び名です。GetFilesは文字通り「ファイルたちをゲットする」という意味になります。
この機能を使うと、指定したフォルダーに入っているすべてのファイルの「パス(住所)」を、文字列の配列という形で一気に取得できます。配列とは、複数のデータを一列に並べて管理する便利な箱のことです。パソコンを触ったことがない方でも、この命令を使えば、大量のファイルを一瞬でスキャンして、後の処理に役立てることができるようになります。まずは基本中の基本、すべてのファイル名を取り出す方法から見ていきましょう。
2. 全てのファイルを取得する基本のプログラム
まずは、特定のフォルダーにあるファイルをすべて取得して、画面に表示するプログラムを作ってみましょう。ファイルやフォルダーを扱うためには、プログラムの先頭に Imports System.IO と書くのが決まりです。これによって、入出力(IO)に関する便利な道具箱が使えるようになります。以下の例では、CドライブのPracticeフォルダーの中身を調べています。
Imports System.IO
Module Module1
Sub Main()
' 調べたいフォルダーの場所を指定します
Dim folderPath As String = "C:\Practice"
' フォルダーが存在するか確認してから実行します
If Directory.Exists(folderPath) Then
' GetFilesでファイルの一覧を「配列」として取得します
Dim files As String() = Directory.GetFiles(folderPath)
' 取得したファイルを一つずつ画面に出します
For Each filePath As String In files
Console.WriteLine("見つかったファイル: " & filePath)
Next
Else
Console.WriteLine("フォルダーが見つかりません。")
End If
End Sub
End Module
3. 専門用語のやさしい解説と身近な例え
プログラミング未経験の方が「おや?」と思うかもしれない言葉を、日常の例えで分かりやすく説明します。ここが分かると、コードがもっと身近に感じられるはずです。
- 配列 (Array): 卵のパックのようなものです。一つの大きなケースに、たくさんの卵(データ)が入っています。今回の場合は、ファイル名という卵が順番に並んでいます。
- For Each (フォー・イーチ): 配列の中身を、最初から最後まで順番に取り出して作業する仕組みです。「卵パックから一つずつ卵を取り出して料理する」イメージです。
- 文字列 (String): プログラムが扱う「文字」のことです。ファイル名やフォルダーの住所はすべてこの文字列として扱われます。
例えるなら、Directory.GetFilesは「引き出しの中を全部見て、中にあるものの名前をメモに書き留める作業」です。自分ですべてのメモを取るのは大変ですが、プログラムなら一瞬で正確なリストを作ってくれます。
4. 特定の種類のファイルだけを探すワイルドカード
フォルダーの中には、画像ファイルやテキストファイルなど、いろいろな種類が混ざっていることがありますよね。そんなとき、「画像だけが欲しい」という願いを叶えるのがワイルドカードという機能です。検索条件を指定することで、特定の拡張子(ファイルの種類の目印)を持つファイルだけを抜き出すことができます。
例えば、「*.txt」と指定すると、名前は何でもいいけれど最後が .txt で終わるファイルだけを探してくれます。この「*(アスタリスク)」は、「どんな文字の代わりにもなる万能な記号」という意味です。これを使うことで、大量のデータの中から必要なものだけを効率よく選別できるようになります。
Imports System.IO
Module Module2
Sub Main()
Dim targetDir As String = "C:\Documents"
' テキストファイル(.txt)だけを取得するように条件を指定します
' 第2引数に検索パターンを入れます
Dim textFiles As String() = Directory.GetFiles(targetDir, "*.txt")
Console.WriteLine("テキストファイルの数は " & textFiles.Length & " 個です。")
' 見つかったファイル名を表示
For Each f In textFiles
Console.WriteLine("テキストファイル: " & f)
Next
End Sub
End Module
5. 下の階層にあるファイルまで全部取得する方法
フォルダーの中に、さらにフォルダーが入っていることがあります。これを「サブディレクトリ」と呼びます。通常の Directory.GetFiles は、指定したフォルダーの直下にあるものしか見ませんが、オプションを指定することで、深い階層にあるファイルまで根こそぎ見つけ出すことができます。
これには「SearchOption.AllDirectories」という長い設定を使います。これを付け加えるだけで、プログラムは迷路のような深いフォルダー構造をくまなく探し回ってくれます。家の中の引き出しだけでなく、クローゼットの中にある箱の中身まで全部調べるような強力な機能です。
Imports System.IO
Module Module3
Sub Main()
Dim rootDir As String = "C:\MyData"
' 全てのサブフォルダーも含めて検索します
' 第3引数にオプションを指定します
Dim allFiles As String() = Directory.GetFiles(rootDir, "*.*", SearchOption.AllDirectories)
Console.WriteLine("全てのフォルダーを調べた結果、" & allFiles.Length & " 個のファイルがありました。")
End Sub
End Module
6. ファイル名だけを綺麗に取り出すPath.GetFileName
Directory.GetFiles で取得したデータには、住所(C:\Practice\sample.txt)がまるごと含まれています。しかし、画面に表示したり整理したりするときは、「sample.txt」というファイル名だけが欲しいことが多いですよね。そんなときにセットで使うのが Path.GetFileName という命令です。
この命令は、長い住所の中からファイル名という一番後ろの部分だけをハサミで切り取るような役割を果たします。これを使うことで、ユーザーに見せるための綺麗なリストを作ることが可能になります。住所を知るための道具と、名前を知るための道具を使い分けるのが、プログラミングの上達のコツです。
Imports System.IO
Module Module4
Sub Main()
Dim dirPath As String = "C:\Photos"
Dim photoFiles As String() = Directory.GetFiles(dirPath, "*.jpg")
Console.WriteLine("--- 写真リスト ---")
For Each fullPath As String In photoFiles
' フルパスからファイル名だけを抽出します
Dim fileName As String = Path.GetFileName(fullPath)
Console.WriteLine("名前: " & fileName)
Next
End Sub
End Module
7. ファイル一覧取得時の注意点とエラー対策
最後に、安全にプログラムを動かすための注意点をお伝えします。パソコンの世界では、時々「開いてはいけない場所」が存在します。例えば、システムが管理している重要なフォルダーの中身を見ようとすると、「アクセスが拒否されました」というエラーが出て、プログラムが止まってしまうことがあります。
また、指定したフォルダーが存在しない場合もエラーになります。そのため、必ず Directory.Exists で存在を確かめる癖をつけましょう。もし大量のファイルを扱う場合は、動作に少し時間がかかることもあります。まずは自分が作った練習用のフォルダーで、少量のファイルから試してみるのが一番です。ファイル一覧が自由自在に取得できるようになれば、データの自動バックアップや、特定キーワードを含むファイルの検索ツールなど、作れるアプリの幅が大きく広がりますよ!