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  

打开文件

打开文件需要先创建一个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");