【入門編】初心者向け:VB.NETでのファイル・フォルダ操作:System.IO.FileとDirectoryクラスを使った安全な存在確認とテキスト読み書きの基本レシピ – Visual Basic (VB / VB.NET)解析バイブル

スポンサーリンク

業務自動化の第一歩:VB.NETでファイル操作を「鉄壁」にするための極意

こんにちは。現場で叩き上げ、数々の自動化システムを構築してきたアーキテクトです。

VB.NETを触り始めた皆さんが、まず最初に「これさえできれば仕事が劇的に楽になる!」と確信するのがファイルやフォルダの操作です。しかし、実はこの分野こそ、適当に書くと「ファイルがない」「誰かが開いていてエラーになる」といった、自動化ツールにとって致命的なトラブルの温床になります。

今回は、単なる「動くコード」ではなく、「現場で止まらない、堅牢なコード」を書くための極意を伝授します。

1. なぜ「System.IO」なのか?

VB.NETでファイル操作を行う際、必ず登場するのが `System.IO` 名前空間です。
ここには `File` クラスや `Directory` クラスといった、OSのファイルシステムを司る強力な道具箱が入っています。

「とりあえず動けばいい」というコードと、「業務で信頼される」コードの差は、「操作前の存在確認」と「例外処理」にあります。

2. フォルダとファイルの「安全な」操作レシピ

まずは、フォルダを作成し、その中にテキストファイルを書き込むという基本動作を、プロ品質の作法で実装してみましょう。

実践コード:フォルダ作成とテキスト書き込み

Imports System.IO ‘ これをファイルの先頭に書くことで、System.IO.を省略できます

Public Sub CreateFileExample()
Dim folderPath As String = “C:\Automation\Reports”
Dim filePath As String = Path.Combine(folderPath, “Log.txt”)

Try
‘ 1. フォルダの存在確認と作成
‘ 既に存在していてもエラーにならないのがDirectory.CreateDirectoryの強みです
If Not Directory.Exists(folderPath) Then
Directory.CreateDirectory(folderPath)
End If

‘ 2. テキストファイルの書き込み
‘ WriteAllTextは内部でファイルを開いて書き込み、即座に閉じるまでを1メソッドで行う安全な道具です
Dim content As String = “自動化処理完了:” & DateTime.Now.ToString()
File.WriteAllText(filePath, content, System.Text.Encoding.UTF8)

Console.WriteLine(“ファイル生成に成功しました。”)

Catch ex As Exception
‘ 3. エラーハンドリング(ここが重要!)
‘ 権限不足やディスクフルなど、予期せぬ事態でもここでキャッチすればアプリは落ちません
Console.WriteLine(“エラー発生: ” & ex.Message)
End Try
End Sub

このコードの「賢い」ポイント

  • `Path.Combine` の活用: 文字列結合でパスを作ると `\` の漏れでバグりやすいです。`Path.Combine` を使えばOSが自動でパスを正しく繋いでくれます。
  • `Directory.CreateDirectory`: このメソッドは、フォルダが既に存在していてもエラーを吐きません。これが「自動化」における鉄則です。
  • `Try…Catch`: ファイル操作は「相手(OSや他者)」がある作業です。例外処理を入れないのは、ブレーキのない車で公道を走るようなものですよ。

3. テキストファイルを安全に読み込む

次に、読み込みです。初心者が陥りやすい罠は「ファイルが空だった場合」や「ファイルがロックされている場合」です。

Public Sub ReadFileExample()
Dim filePath As String = “C:\Automation\Reports\Log.txt”

‘ ファイルが存在するか、常に確認する癖をつけましょう
If File.Exists(filePath) Then
Try
‘ 一括読み込み。小〜中規模ファイルならこれが最もシンプルで高速です
Dim lines As String = File.ReadAllText(filePath, System.Text.Encoding.UTF8)
Console.WriteLine(lines)
Catch ex As IOException
‘ 別のプログラムがファイルを開いている時のエラーを特定して対処可能
Console.WriteLine(“ファイルが使用中です: ” & ex.Message)
End Try
Else
Console.WriteLine(“対象のファイルが見当たりません。”)
End If
End Sub

4. 初心者が絶対に守るべき「3つの鉄則」

現場で数々のコードレビューをしてきた私が、皆さんにこれだけは守ってほしいと思う「極限の知見」です。

1. 「あるはず」という前提を捨てる

  • コードを書く時は常に「ファイルがないかも?」「フォルダが削除されているかも?」と疑ってください。`Exists` チェックは、あなたのプログラムを守る盾です。

2. エンコーディングを明示する

  • `Encoding.UTF8` を指定しましょう。指定しないと環境依存(Shift-JISなど)で文字化けを引き起こし、将来の自分を苦しめることになります。

3. リソースの解放を意識する

  • `File.ReadAllText` のような一括メソッドは便利ですが、巨大なファイルを扱う場合はメモリを圧迫します。将来的に数GBのログを扱うようになったら、`StreamReader` を使って「少しずつ読む」手法を調べてみてください。

最後に:自動化の旅路へ

VB.NETでのファイル操作は、業務自動化の「基礎体力」です。
ここを丁寧に、美しく書けるようになるだけで、あなたの作るツールは一気にプロの品質へと昇華します。

「動いた!」という達成感のその先にある、「誰が使っても、どんな環境でも止まらないコード」を目指してください。ここをクリアすれば、あなたはもう立派な自動化エンジニアの入り口に立っています。

何か詰まったら、いつでも戻ってきてくださいね。また次のステップでお会いしましょう!

タイトルとURLをコピーしました