C++ 文件I/O简要
stream
C++中有一个很重要的类,stream,即“流”。所有的I/O操作都是通过对字节流的操作来实现的,包括最基本的输入输出cin、cout以及我们今天要说的文件I\O:ofstream(out file stream)和ifstream(in file stream)。
stream这个类有两个重要的运算符:
1、插入器(<<)
向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<'\n';就表示把字符串"Write Stdout"和换行字符('\n')输出到标准输出流。
2、析取器(>>)
从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型的数据。
在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream。
#include <fstream>
打开文件
打开文件需要先创建一个ifstream或者ofstream的对象,然后再调用成员函数open():
//以写模式打开文件,若找不到文件,则会创建 ofstream outfile; outfile.open("path") //以读模式打开文件,若找不到文件,则会报错 ifstream infile; infile.open("path") //写入数据 string data1 = "123"; outfile << data1 << endl; //读取数据 string data2; infile >> data2; //关闭打开的文件 outfile.close() infile.close()
其中,path可以是相对路径,也可以是绝对路径。需要注意的是,如果是绝对路径,最好以“\\”作为间隔。
open()函数的参数:
filename 操作文件名
mode 打开文件的方式
prot 打开文件的属性
其中,mode可以为:
ios::in | 为输入(读)而打开文件 |
ios::out | 为输出(写)而打开文件 |
ios::ate | 初始位置:文件尾 |
ios::app | 所有输出附加在文件末尾 |
ios::trunc | 如果文件已存在则先删除该文件 |
ios::binary | 二进制方式 |
这些方式是能够进行组合使用的,以“或”运算(“|”)的方式,例如:
fin.open("test.txt", ios::in|ios::out|ios::binary)
另外,我们也可以使用构造函数的方式来创建ifstream或者ofstream类的对象:
ifstream infile("test.txt");