★バイナリファイルの読み書き★


バイナリファイルもC言語編でやりましたので、この回で読み書き両方説明します。


バイナリファイルの書き込み


とりあえず、サンプルを1つ書いてから説明します。

<sample program cpp031-01>

#include <iostream>
#include <fstream>

int main()
{
    std::ofstream ofsTest;

    ofsTest.open("Test.bin", std::ios::out | std::ios::binary);

    if (!ofsTest) {
        return 1;
    }

    int num = 65;

    ofsTest.write((char*)&num, sizeof(int));

    if (ofsTest.is_open()) {
        ofsTest.close();
    }

    return 0;
}

<実行結果>

続行するには何かキーを押してください・・・

オープンする時の「モード」に「std::ios::binary」を追加しています。

※2つ以上のモードを組み合わせる時は、論理積「 | 」を使ってつなぎます。

これで、バイナリモードでファイルが開けます。

ストリームへの出力は「<<」では無く、write関数を使います。

最初の引数は、書き込みたいデータの先頭アドレスなのですが、「char*」にキャストする必要があります。

※C++のキャストは後々説明します。

第2引数は「バイト数」です。


出力された「Test.bin」はダブルクリックでは開きません。

メモ帳を開いて、そこにドラッグドロップして中身を確認してください。

半角大文字の「 A 」が入っていれば成功しています。

※Aの文字コードは・・・覚えていますか?


バイナリファイルの読み込み


次に、この「Test.bin」を読み込む方法を説明します。

これも、サンプルを先に作ります。

<sample program cpp031-02>

#include <iostream>
#include <fstream>

int main()
{
    std::ifstream ifsTest;

    ifsTest.open("Test.bin", std::ios::in | std::ios::binary);

    if (!ifsTest) {
        return 1;
    }

    int num;

    ifsTest.read((char*)&num, sizeof(int));

    if (ifsTest.is_open()) {
        ifsTest.close();
    }

    std::cout << "num = " << num << std::endl;

    return 0;
}

<実行結果>

65
続行するには何かキーを押してください・・・

入力ファイルストリームをバイナリモードで開き、read関数で読み込みました。

次回は少し意味のある事をやってみましょう。


次へ

戻る

目次へ