VC++でバイナリデータを読み書きしたいのですが、
入力ストリームをinputFileとして、
while(!inputFile.eof())で回して
(inputFile).readを使ってデータを読み込もうとすると、
データ内にEOFを同じ値の0x1aがあるとそこで読み込みが
止まってしまいます。うまくデータを読み込む方法はないでしょうか。
テスト用に以下のようなプログラムを書いてみました。
---------------------
#include <iostream>
#include <fstream>
using namespace std;
void writeFile(){
ofstream outputFile("test.dat", ios::out);
int count = 0;
for(int i = 0; i < 0xffff; i++){
//if((i % 256) != 26 && ((i >> 8) % 256) != 26){
outputFile.write((char *)&i, sizeof(int));
count++;
//}
}
cout << "Write : " << (count * 4) << "byte." << endl;
outputFile.close();
}
void readFile(){
ifstream inputFile("test.dat", ios::in);
int count = 0;
int i;
while(!inputFile.eof()){
inputFile.read((char *)&i, sizeof(int));
count++;
}
inputFile.close();
cout << "Read : " << (count * 4) << "byte. " << endl;
}
main(){
writeFile();
readFile();
}
コメントの部分を外して、EOFの値を含むデータを書き込まないようにすると、
きちんと最後までファイルを読みますが、EOFの値が途中で混じっていると
そこで止まってしまうようです。
どなたかご指導のほどよろしくお願いします。
> ifstream inputFile("test.dat", ios::in);
std::ifstream inputFile("test.dat", std::ios::in | std::ios::binary);
にしてみたらどうでしょう。
早速の回答ありがとうございます。
問題なく解決しました。
ちょっと本に載っていること以外の知識が必要になると
すぐつまづいてしまいます…。
ツイート | ![]() |