カテゴリ: VB.NET 更新日: 2026/03/12

VB.NETでバイナリファイルを読み書きする方法を完全ガイド!初心者でもわかるBinaryReaderとBinaryWriter

VB.NETでバイナリファイルを読み書きする方法(BinaryReader/BinaryWriter)
VB.NETでバイナリファイルを読み書きする方法(BinaryReader/BinaryWriter)

先生と生徒の会話形式で理解しよう

生徒

「VB.NETで『バイナリファイル』を扱いたいのですが、普通のテキストファイルと何が違うんですか?」

先生

「テキストファイルは人間が読んで理解できる文字の集まりですが、バイナリファイルは画像や音楽、設定データなど、コンピューターが効率よく処理するための生データの集まりのことですよ。」

生徒

「難しそうですね。私のような初心者でも読み書きできるようになりますか?」

先生

「大丈夫です。VB.NETにはBinaryWriterとBinaryReaderという専用の道具があります。これらを使えば、一つずつ順番にデータを出し入れするだけで簡単に操作できます。さっそく基本から学んでいきましょう!」

1. バイナリファイルとBinaryWriterの基本

1. バイナリファイルとBinaryWriterの基本
1. バイナリファイルとBinaryWriterの基本

プログラミングの世界では、データを保存する形式が大きく分けて二つあります。一つはメモ帳で開いて中身が読める「テキストファイル」、もう一つが今回学習する「バイナリファイル」です。バイナリファイルは、文字として表示できない数値そのものや、特殊な記号をそのまま保存するため、ファイルサイズを小さくできたり、処理速度が速かったりするという利点があります。

VB.NETでこのバイナリファイルにデータを書き込むために使うのが、BinaryWriter(バイナリライター)というクラスです。「Writer」は「書き手」という意味ですね。これを使うことで、数値や文字などのデータをバイナリ形式に変換してファイルへ保存することができます。まずは、一番シンプルな書き込みの例を見てみましょう。


Imports System.IO

Module Module1
    Sub Main()
        ' 保存するファイルのパスを指定します
        Dim filePath As String = "C:\temp\test.dat"

        ' BinaryWriterを使ってファイルを作成し、書き込みます
        ' File.OpenWriteでファイルを開き、それをBinaryWriterに渡します
        Using writer As New BinaryWriter(File.OpenWrite(filePath))
            ' 整数(Integer)を書き込みます
            writer.Write(100)
            ' 小数(Double)を書き込みます
            writer.Write(123.45)
            ' 文字列(String)を書き込みます
            writer.Write("こんにちは")
        End Using

        Console.WriteLine("ファイルの書き込みが完了しました。")
    End Sub
End Module

2. データを読み込むBinaryReaderの使い方

2. データを読み込むBinaryReaderの使い方
2. データを読み込むBinaryReaderの使い方

ファイルに書き込んだデータは、当然ながら後で読み出す必要があります。バイナリファイルからデータを取り出すときに使うのが、BinaryReader(バイナリリーダー)です。「Reader」は「読み手」という意味です。バイナリファイルを読み込む際に最も大切なルールは、「書き込んだ順番通りに読み込む」ということです。例えば、最初に整数を書き込んだのなら、読み込むときも最初に整数として読み込まなければなりません。この順番が狂うと、データが壊れてしまい、正しい値を取得できなくなります。

ここでは、先ほど作成したファイルからデータを読み出すプログラムを作成してみます。読み込むときは、データの型(整数なのか、文字なのか)に合わせて、ReadInt32やReadStringといった専用の命令を使い分けます。


Imports System.IO

Module Module2
    Sub Main()
        Dim filePath As String = "C:\temp\test.dat"

        ' ファイルが存在するか確認します
        If File.Exists(filePath) Then
            ' BinaryReaderを使ってファイルを読み込みます
            Using reader As New BinaryReader(File.OpenRead(filePath))
                ' 書き込んだ順序(整数、小数、文字列)で読み込みます
                Dim intVal As Integer = reader.ReadInt32()
                Dim dblVal As Double = reader.ReadDouble()
                Dim strVal As String = reader.ReadString()

                ' 結果を画面に表示します
                Console.WriteLine("読み込んだ整数: " & intVal)
                Console.WriteLine("読み込んだ小数: " & dblVal)
                Console.WriteLine("読み込んだ文字列: " & strVal)
            End Using
        End If
    End Sub
End Module

読み込んだ整数: 100
読み込んだ小数: 123.45
読み込んだ文字列: こんにちは

3. 専門用語の解説と身近な例え

3. 専門用語の解説と身近な例え
3. 専門用語の解説と身近な例え

ここで、少し難しい用語が出てきたので整理しておきましょう。プログラミング未経験の方にとって、バイナリ操作は「魔法の箱」のように見えるかもしれませんが、実はとても論理的です。

  • ストリーム (Stream): データの流れる川のようなものです。ファイルとプログラムの間でデータが行き来する通り道を指します。
  • Using(ユージング)句: 「この道具を使います」と宣言し、使い終わったら自動的に片付けてくれる便利な仕組みです。これを使わないと、ファイルを開きっぱなしにしてしまい、他のソフトでそのファイルが開けなくなるなどのトラブルが起きます。
  • バイト (Byte): コンピューターが扱う最小のデータ単位です。バイナリファイルはこのバイトが並んだものです。

例えるなら、バイナリファイルへの書き込みは「細いチューブに、決まった形のブロックを順番に詰め込んでいく作業」です。四角いブロック(整数)の次に丸いブロック(文字列)を入れたなら、取り出すときも出口から四角、丸の順でしか取り出せません。この「形」を間違えると、チューブの中でブロックが詰まったり、壊れたりしてしまうのです。

4. 複数のデータを繰り返し書き込む方法

4. 複数のデータを繰り返し書き込む方法
4. 複数のデータを繰り返し書き込む方法

実際の開発では、一つのデータだけでなく、たくさんのデータをまとめて保存したい場面が多くあります。例えば、ゲームのキャラクターのステータスや、家計簿のデータなどです。このような場合は、ループ処理(For文)を組み合わせてバイナリファイルを作成します。繰り返し同じ形式のデータを書き込むことで、大量の情報を効率よく管理できるようになります。以下の例では、複数の数値をまとめて保存する方法を紹介します。


Imports System.IO

Module Module3
    Sub Main()
        Dim filePath As String = "C:\temp\scores.dat"
        Dim scores As Integer() = {85, 92, 78, 64, 99}

        ' 配列のデータをすべて書き込みます
        Using writer As New BinaryWriter(File.Open(filePath, FileMode.Create))
            ' データの個数を最初に書き込んでおくと読み込みが楽になります
            writer.Write(scores.Length)
            
            ' 各スコアを順番に書き込みます
            For Each s As Integer In scores
                writer.Write(s)
            Next
        End Using

        Console.WriteLine("配列データの保存が完了しました。")
    End Sub
End Module

5. 条件に合わせたファイルの開き方(FileMode)

5. 条件に合わせたファイルの開き方(FileMode)
5. 条件に合わせたファイルの開き方(FileMode)

ファイルを操作するとき、「新しく作り直したい」場合もあれば、「今あるファイルの後ろに追記したい」場合もあります。これを制御するのがFileMode(ファイルモード)という設定です。バイナリファイルを扱う際によく使われる設定を覚えておきましょう。

  • Create: 常に新しいファイルを作成します。もし同じ名前のファイルが既にある場合は、中身を全部消して上書きします。
  • Open: 既存のファイルを開きます。ファイルが存在しないとエラーになります。
  • Append: ファイルの末尾にデータを付け足します。ログの記録などに便利です。

初心者のうちは、まず「Create」で練習し、慣れてきたら「Open」で中身を読み取るという流れを意識するとスムーズです。ファイルの場所を指定するときは、パス(住所のようなもの)が正しいかしっかり確認してくださいね。

6. エラーを防ぐためのポイントと注意点

6. エラーを防ぐためのポイントと注意点
6. エラーを防ぐためのポイントと注意点

バイナリファイルの読み書きで最も多い失敗は、「読み込もうとしたデータの型が、書き込んだ時と違う」というものです。例えば、Integer型(4バイトの整数)で保存した場所を、ReadBoolean(1バイトの真偽値)で読み込もうとすると、データがズレてしまい、その後すべての読み込みが無茶苦茶になります。これを防ぐためには、データの構造を「設計図」としてメモしておくことが大切です。

また、ファイル操作には常に「ファイルが見つからない」「別のプログラムが使用中」といったリスクが伴います。そのため、実務ではTry...Catch(トライ・キャッチ)という構文を使って、エラーが起きてもプログラムが強制終了しないようにガードを固めるのが一般的です。まずは基本の読み書きをマスターしてから、こうした応用的な守りの技術を学んでいきましょう。


Imports System.IO

Module Module4
    Sub Main()
        Dim filePath As String = "C:\temp\config.dat"

        ' 書き込み処理
        Using writer As New BinaryWriter(File.Create(filePath))
            writer.Write(True) ' 設定オン
            writer.Write(2026) ' 年号
        End Using

        ' 読み込み処理
        Using reader As New BinaryReader(File.OpenRead(filePath))
            ' PeekCharは次にデータがあるか確認する時に使えます
            If reader.PeekChar() <> -1 Then
                Dim isEnabled As Boolean = reader.ReadBoolean()
                Dim currentYear As Integer = reader.ReadInt32()
                
                Console.WriteLine("設定: " & isEnabled)
                Console.WriteLine("年度: " & currentYear)
            End If
        End Using
    End Sub
End Module

7. バイナリ操作の学習を深めるために

7. バイナリ操作の学習を深めるために
7. バイナリ操作の学習を深めるために

VB.NETのファイル操作は非常に奥が深いです。BinaryWriterやBinaryReaderを使いこなせるようになると、独自のファイル形式を作ってデータを保存したり、ネットワークを通じてデータを送受信したりする基礎体力がつきます。パソコンに触ったことがない方でも、一つひとつの命令の意味を「誰かに手紙を書く作業」のように捉えれば、きっと理解できるはずです。

最初は難しく感じるかもしれませんが、自分で書いたコードでファイルが出来上がり、それを再び読み込めた時の感動はプログラミングの醍醐味です。キーワードとして「ストリーム」「バッファ」「エンコード」といった言葉も重要になってきますが、まずは目の前の読み書きを何度も練習して、体で覚えていくことをおすすめします。失敗を恐れず、色々なデータをバイナリで保存してみてください。

関連記事:
カテゴリの一覧へ
新着記事
New1
ASP.NET
IISにASP.NETアプリをデプロイする基本手順を完全ガイド!初心者でもわかる公開方法
New2
VB.NET
VB.NETのFor Eachループを完全マスター!初心者でもわかるコレクション処理の基本
New3
ASP.NET
ASP.NETアプリのデプロイ手順の全体像!初心者でもわかるIIS・Docker・Azure App Service
New4
ASP.NET
ASP.NET MVCでJSONデータを返すAPIの作り方!初心者でもわかるデータ通信入門
人気記事
No.1
Java&Spring記事人気No1
VB.NET
VB.NETの入出力の基本!初心者でもわかるConsole.WriteLine()とConsole.ReadLine()の使い方
No.2
Java&Spring記事人気No2
VB.NET
VB.NETでテキストファイルに書き込む方法を完全解説!WriteAllTextとAppendAllText
No.3
Java&Spring記事人気No3
VB.NET
VB.NETでStaticメソッドを定義する方法と活用例
No.4
Java&Spring記事人気No4
VB.NET
VB.NETでの変数名の付け方とは?わかりやすくエラーの起きにくい命名規則を紹介
No.5
Java&Spring記事人気No5
VB.NET
VB.NETプログラムの実行方法まとめ!Visual Studio・コマンドラインの使い方
No.6
Java&Spring記事人気No6
VB.NET
VB.NETの配列(Array)の作り方と基本操作を徹底解説!初心者でもわかる入門ガイド
No.7
Java&Spring記事人気No7
ASP.NET
ASP.NETとは?初心者向けにできることと特徴をやさしく解説
No.8
Java&Spring記事人気No8
VB.NET
VB.NETのDictionaryを完全ガイド!初心者でもわかる辞書の基本と応用