バイナリファイルも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関数で読み込みました。
次回は少し意味のある事をやってみましょう。