【C#】バイト配列のデータをファイルに書き込む (FileStream.Write)

画像データや通信パケット、あるいは独自のバイナリ形式など、byte[](バイト配列)のデータをファイルとして保存する場合、FileStream クラスを使用することで柔軟な書き込み処理が可能になります。

単にすべてのバイトを書き込むだけであれば File.WriteAllBytes という簡易メソッドもありますが、FileStream.Write を使用すると、「配列の途中から書き込む」「既存のファイルを開いたまま追記する」「バッファリングしながら書き込む」といった細かな制御が可能になります。

目次

実装サンプル:設定データのバイナリ保存

以下のコードでは、アプリケーションの設定情報を文字列として用意し、それをバイトデータに変換した上で、ファイルストリームを使用して保存しています。

サンプルコード

using System;
using System.IO;
using System.Text;

public class Program
{
    public static void Main()
    {
        // 保存先のファイルパス
        string outputFile = "app_config.dat";

        // 書き込みたいデータ(ここでは設定情報の文字列を想定)
        string configData = "Version=1.0;Mode=Secure;MaxUsers=100;";

        // 文字列をバイト配列に変換 (UTF-8)
        byte[] dataBuffer = Encoding.UTF8.GetBytes(configData);

        Console.WriteLine($"書き込みデータサイズ: {dataBuffer.Length} bytes");

        // FileStreamを使用してファイルを開く(または作成する)
        // FileMode.Create: ファイルがなければ作成、あれば上書き(0バイトから再作成)
        // FileAccess.Write: 書き込み権限のみで開く
        using (FileStream fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write))
        {
            // バイト配列の内容をファイルに書き込む
            // Write(バッファ, 配列内の開始位置, 書き込む長さ)
            fs.Write(dataBuffer, 0, dataBuffer.Length);
        }

        Console.WriteLine($"ファイルへの保存が完了しました: {outputFile}");

        // (確認用) 正しく書き込まれたか読み出して表示
        if (File.Exists(outputFile))
        {
            string loadedText = File.ReadAllText(outputFile, Encoding.UTF8);
            Console.WriteLine($"\n[確認] ファイル内容: {loadedText}");
        }
    }
}

実行結果

書き込みデータサイズ: 36 bytes
ファイルへの保存が完了しました: app_config.dat

[確認] ファイル内容: Version=1.0;Mode=Secure;MaxUsers=100;

解説と技術的なポイント

1. FileStream.Write メソッド

public void Write(byte[] buffer, int offset, int count)
  • buffer: 書き込むデータが入ったバイト配列。
  • offset: 配列の「何番目の要素」から書き込みを始めるか(0なら先頭から)。
  • count: 書き込むバイト数。

例えば、「配列の先頭10バイトはヘッダーなのでスキップし、残りを書き込みたい」といった場合に、offset を指定することで配列のコピーを作らずに効率よく書き込むことができます。

2. FileMode の選択

FileStream のコンストラクタで指定する FileMode によって、ファイルの扱いが変わります。

  • FileMode.Create: 新規作成。同名ファイルがあれば上書き(中身は空になる)します。
  • FileMode.CreateNew: 新規作成。同名ファイルがあると例外(エラー)が発生します。
  • FileMode.Append: 既存のファイルの末尾に追記します(ファイルがなければ作成)。

用途に合わせて適切なモードを選択することが重要です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次