我写了两个文件,一个是文本模式,一个是二进制模式,代码如下:
写.cpp
struct person {
char name[20];
int age;
float weight;
};
int main(){
ofstream output("data.txt");
ofstream output2("data2.txt", ios::out|ios::binary);
int i;
person tmp;
for (i=0; i<4; i++){
cout<<"Write name: ";
cin >> tmp.name;
cout<<endl<<"age: ";
cin >> tmp.age;
cout<<endl<<"weight: ";
cin >> tmp.weight;
output.write((char*) &tmp, sizeof(tmp));
output2.write((char*) &tmp, sizeof(tmp));
}
output.close();
output2.close();
getchar();
return 0;
}
这两个文件是相同的(我也用十六进制编辑器检查过)。
当我尝试使用以下代码阅读时,阅读第一项后我得到一个 EOF:
读取.cpp
int main(){
bool found = false;
int pos;
person tmp;
ifstream file("data.txt");
if (!file) {
cout << "Error";
return 1;
}
while(!file.eof() && !found) {
file.read( (char*) &tmp, sizeof(tmp));
cout << "tmp.name: "<<tmp.name<<endl;
cout << "EOF? "<<file.eof()<<endl;
if (strcmp(tmp.name, "jack") == 0){
found = true;
//pos = file.tellg();
//pos -= (int) sizeof(tmp);
}
}
file.close();
cout << endl <<"Press ENTER to continue...";
getchar();
return 0;
}
输出
tmp.name: Jacob
EOF? 1
found? 0
但是,如果我将 ifstream 打开为二进制模式 ( ifstream file("data.txt", ios::in|ios::binary);
),程序会找到我想要搜索的人。即使我以文本模式编写文件,有人可以解释我为什么它以二进制模式工作吗?