C++文件输入输出可以按照文件操作和文件模式来讲解。
文件操作
1.定义文件输入流和输出流
(均包含在fstream中)
ifstream fin("file.in");
ofstream fout ("file.out");
2.检查文件是否打开成功
<span style="white-space:pre"> if(!fin)
{
<span style="white-space:pre"> </span>cerr<<"error:unable to open input file"<<endl;
<span style="white-space:pre"> </span>return -1;
}</span>
3.将文件流与新文件重新捆绑
<span style="white-space:pre"> </span>ifstream fin("file1.in");
<span style="white-space:pre"> </span>fin.close();
<span style="white-space:pre"> </span>fin.clear();<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>fin.open("file2.in");
如果要把fstream对象与另一个不同的文件关联起来,则必须先关闭(close)现在的文件,并且清空当前流的状态,然后打开(open)另一个文件。因为open函数会检查流是否已经打开,如果已经打开,则设置内部状态,以指出发生了错误。接下来使用文件流的任何尝试都会失败。
文件模式
在打开文件时,无论是调用open还是以文件名作为流初始化的一部分,都需指定文件模式(实质是整型常量)。模式是文件的属性而不是流的属性。
ios::in | 为输入(读)而打开文件 |
ios::out | 为输出(写)而打开文件 |
ios::ate | 初始位置:文件尾 |
ios::app | 所有输出附加在文件末尾 |
ios::trunc | 如果文件已存在则先删除该文件 |
ios::binary | 二进制方式 |
这些标识符可以被组合使用,中间以”或”操作符(|)间隔。
ofstream, ifstream 和 fstream所有这些类的成员函数open 都包含了一个默认打开文件的方式
xxstream.open("filepath")
,这三个类的默认方式各不相同:
类 | 参数的默认方式 |
---|---|
ofstream | ios::out | ios::trunc |
ifstream | ios::in |
fstream | ios::in | ios::out |
只有当函数被调用时没有声明方式参数的情况下,默认值才会被采用。
向文件末尾添加文本:ofstream fout("file.out",ofstream::app);