通过以下方法进行创建一个可读可写的文件流对象,绑定了文件“data.txt”
fstream iofile("data.txt", ios::out| ios::in);
int a = 5;
iofile << a;
iofile.close();
iofile.open("data.txt");
int b;
iofile >> b;
cout << b;
iofile.close();
在谭浩强的《C++程序设计》中,这样的写法是可行的,书中说到“采用ios::out和ios::in模式打开文件时,如果文件不存在,将创建一个新文件”。
然而实际上却是:“data.txt”文件未在目录下生成
fstream iofile("data.txt", ios::out| ios::in);
if (iofile.fail()){
cout << "文件打开失败" << endl;
exit(0);
}
原因:通过ios::in方式打开文件时,编译器默认该文件已经存在,则没有去自动地创建该文件。
文件不自动创建,该文件不存在,则在读入时则会出现问题
ios::in|ios::out模式打开文件只适合于该文件已存在
解决方法:去掉ios::in模式,使得编译器能自动创建该文件;
后分成一个ofstream对象、一个ifstream对象进行操作;或者是同一文件流fstream对象,一次以ios::out打开文件,关闭后另一次以ios::in打开该文件
fstream iofile("data.txt", ios::out);
iofile.close();
.....//操作
iofile.open("data.txt", ios::in);
iofile.close();
//或者是
ofstream ofile("data.txt", ios::out);
ifstream ifile("data.txt", ios::in);
绝知此事要躬行