C#でバイナリファイルを読み書きする方法(BinaryReader・BinaryWriter)
生徒
「先生、C#で画像や数値データをファイルに保存したり、読み込んだりする方法ってありますか?」
先生
「良い質問ですね。C#では『バイナリファイル』を扱うことで、文字だけでなく、数値や画像などのデータも保存・読み込みできるんですよ。」
生徒
「バイナリファイルって、テキストファイルとは違うんですか?」
先生
「そうです。テキストファイルは文字が読めますが、バイナリファイルは『0と1のデータのかたまり』なので、人間には読めません。その代わり、データを正確に保存できるという特徴があります。」
生徒
「なるほど。じゃあ、そのバイナリファイルをC#で扱うにはどうすればいいですか?」
先生
「C#には BinaryWriter と BinaryReader という便利なクラスが用意されています。それを使えば簡単に読み書きできますよ!」
1. バイナリファイルとは?
バイナリファイルとは、データを「0と1(バイナリデータ)」の形で保存したファイルのことです。例えば、画像ファイル(.jpgや.png)、音声ファイル(.mp3)などもバイナリデータでできています。
テキストファイルのように人間が読むことはできませんが、プログラムが扱うには効率的で正確な形式です。C#では、数値・文字列・真偽値などをまとめて保存できるのが特徴です。
2. BinaryWriterを使ってデータを書き込む
BinaryWriterは、バイナリデータをファイルに書き込むためのクラスです。数値や文字列をそのままの形式で保存できるため、文字化けなどの心配がありません。
使い方はとても簡単で、ファイルを開いて Write() メソッドでデータを書き込むだけです。
using System;
using System.IO;
class Program
{
static void Main()
{
// バイナリファイルにデータを書き込む
using (BinaryWriter writer = new BinaryWriter(File.Open("data.bin", FileMode.Create)))
{
writer.Write(123); // 整数
writer.Write(3.14); // 小数
writer.Write(true); // 真偽値
writer.Write("こんにちは"); // 文字列
}
Console.WriteLine("バイナリファイルにデータを書き込みました。");
}
}
バイナリファイルにデータを書き込みました。
using文を使うことで、ファイルを自動的に閉じてくれます。FileMode.Createは、ファイルがなければ新しく作り、すでにある場合は上書きします。
3. BinaryReaderを使ってデータを読み込む
BinaryReaderは、バイナリファイルに保存されたデータを読み込むためのクラスです。ReadInt32()やReadString()など、型に応じたメソッドでデータを取り出します。
using System;
using System.IO;
class Program
{
static void Main()
{
// バイナリファイルからデータを読み込む
using (BinaryReader reader = new BinaryReader(File.Open("data.bin", FileMode.Open)))
{
int number = reader.ReadInt32();
double pi = reader.ReadDouble();
bool flag = reader.ReadBoolean();
string message = reader.ReadString();
Console.WriteLine($"整数: {number}");
Console.WriteLine($"小数: {pi}");
Console.WriteLine($"真偽値: {flag}");
Console.WriteLine($"文字列: {message}");
}
}
}
整数: 123
小数: 3.14
真偽値: True
文字列: こんにちは
ポイントは、書き込んだ順番で読み込むことです。順番が違うとデータの種類が合わず、正しく読み取れません。
4. バイナリファイルとテキストファイルの違い
初心者の方がよく混乱するのが、バイナリファイルとテキストファイルの違いです。以下のような特徴があります。
- テキストファイル:人間が読める形式(例:「123」「こんにちは」など)
- バイナリファイル:コンピューターが扱いやすい形式(例:画像・音声・プログラムデータなど)
テキストファイルはメモ帳などで中身を確認できますが、バイナリファイルを開くと意味不明な記号のように見えます。これは、文字としてではなく「生のデータ」として保存されているからです。
5. バイナリファイルの活用例
バイナリファイルは、次のような場面でよく使われます。
- ゲームのセーブデータの保存
- アプリケーション設定情報の保存
- 画像・音声・動画データの読み込み
- 通信データの送受信
例えば、プレイヤーのスコアやレベルなどをバイナリ形式で保存すれば、読み込みも高速で、改ざんされにくくなります。テキストファイルよりも効率的にデータを扱えるのがメリットです。
6. ファイル操作時の注意点
バイナリファイルを扱う際に注意すべきポイントもあります。
- ファイルの読み書き順番を間違えない
- 異なる型で読み取らない(例:書き込み時に
intで、読み込み時にstringで読むとエラー) - ファイルを開いたら必ず閉じる(
usingで自動的に閉じるのが安全)
これらを守ることで、安全かつ正確にデータを保存・読み込むことができます。
7. まとめ:BinaryReaderとBinaryWriterを使いこなそう
今回学んだように、C#ではBinaryReaderとBinaryWriterを使うことで、テキストではなくバイナリ形式のデータを簡単に扱うことができます。これらを使いこなせば、設定ファイルやゲームデータなど、幅広い場面で応用できるようになります。