首先展示一个小的案例
#include<iostream>
#include "fstream" //文件读取的头文件
using namespace std;
int main(){
ofstream fpo("f://14.txt",ios::ate); //建立一个输出流对象和文件关联 只有一个参数 默认情况下后面为ios::out
if ( fpo.fail())
{
cout << "文件读取失败" << endl;
}
fpo << "hello world111" << endl;
fpo << "hello world222" << endl;
fpo.close(); //关闭文件
ifstream fpi("f://1.txt"); //建立一个输入流对象和文件关联 只有一个参数 默认情况下后面为ios::in
char ch;
while (fpi.get(ch))
{
cout << ch;
}
fpi.close();
system("pause");
return 0;
}
关于在打开文件的过程中,可以利用连接符 “ | ”串联更多的选项,具体的选项见下面的表格
几点说明:
1) 新版本的I/O类库中不提供ios::nocreate和ios::noreplace。
2) 每一个打开的文件都有一个文件指针,该指针的初始位置由I/O方式指定,每次读写都从文件指针的当前位置开始。每读入一个字节,指针就后移一个字节。当文 件指针移到最后,就会遇到文件结束EOF(文件结束符也占一个字节,其值为-1),此时流对象的成员函数eof的值为非0值(一般设为1),表示文件结束 了。
3) 可以用“位或”运算符“|”对输入输出方式进行组合,如表13.6中最后3行所示那样。还可以举出下面一些例子:
ios::in | ios:: noreplace //打开一个输入文件,若文件不存在则返回打开失败的信息
ios::app | ios::nocreate //打开一个输出文件,在文件尾接着写数据,若文件不存在,则返回打开失败的信息
ios::out l ios::noreplace //打开一个新文件作为输出文件,如果文件已存在则返回打开失败的信息
ios::in l ios::out I ios::binary //打开一个二进制文件,可读可写
但不能组合互相排斥的方式,如 ios::nocreate l ios::noreplace。
4) 如果打开操作失败,open函数的返回值为0(假),如果是用调用构造函数的方式打开文件的,则流对象的值为0。可以据此测试打开是否成功。如
if(outfile.open("f1.bat", ios::app) ==0)
cout <<"open error";
或
if( !outfile.open("f1.bat", ios::app) )
cout <<"open error";