C++提供了三种类型来从文件中进行操作
- ofstream:将流中的数据写入到文件
- ifstream:将文件的数据读入到流中
- fstream:对文件进行读和写操作
其中,ofstream公有继承自ostream,ifstream公有继承自istream,istream和ostream共同派生iostream,fstream公有继承iostream,这三个类都包含在头文件fstream中。
下面是一个对文件操作的简单示例
#include<iostream>
#include<fstream>
using namespace std;
int main(){
ofstream myfile; //创建一个未绑定的文件流
myfile.open("test.txt"); //打开同路径下的文件,没有则新建
myfile<<"hello world!"<<endl; //写入文件
myfile.close(); //关闭文件
return 0;
}
打开文件
进行文件读写之前,都要先打开文件,这里的打开文件实际上是将一个文件流对象绑定到一个文件中,绑定了之后就可以对文件进行读写了,可以通过以下两种方式对文件进行绑定
//方法一
ofstream myfile;
myfile.open("test.txt");
//方法二
ofstream myfile("test.txt");
方法一中的open函数是属于fstream,ifstream,fstream中的成员函数,该函数原型为
void open(const char *filename, ios::openmode mode);
其中第一个参数为文件绑定的文件名,第二个参数为打开文件的模式。ifstream默认是in模式,ofstream默认是out模式,一共存在以下六种不同的打开文件模式
模式 | 功能 |
---|---|
in | 以读方式打开文件 |
out | 以写的方式打开文件 |
app | 每次写操作之前定位到文件的末尾 |
ate | 打开文件之后立即定位到文件末尾 |
trunc | 如果该文件已经存在,其内容将在打开文件之前被截断 |
binary | 以二进制打开文件 |
以上模式有的可以同时使用,例如fstream默认同时使用了in和out两种模式。指定文件打开的模式存在以下限制
- out模式只能由fstream和ofstream打开
- in模式只能由fstream和ifstream打开
- 以out模式打开的文件会抛弃文件已经含有的数据,可以加入app模式
写入文件
打开了一个文件之后,可以使用流插入运算符( << )向文件写入信息,就如同使用该运算符输出信息到屏幕上一样。唯一不同的是,在这里您使用的是 ofstream 或 fstream 对象,而不是 cout 对象。
读取文件
同样用流提取运算符(>>)从文件中读取信息,就好比使用该运算符从键盘输入信息到屏幕上一样,这里就是把 cin 对象换成了 ifstream 或者 fstream 对象。
下面是一个文件读写的实际例子
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main(){
ifstream in("poet.txt");
ofstream out("test.txt");
string line;
while(getline(in,line)) {
out<<line<<endl;
}
//记得关闭文件
in.close();
out.close();
return 0;
}