1.简介
cpp中文件的操作跟输入输出的cin/cout类似,文件被当作流来进行操作。
cpp中提供文件操作的头文件是:#include 。
其中ifstream类是读取操作,ofstream类是写操作,fstream类是读写操作。
2.基本操作
2.1打开
打开一个文件的方法是:
ofstream out;
out.open("test.txt");//1 这种方式:ifstream默认为ios::in模式,ofstream默认为ios::out模式,iostream默认为ios::in | ios::out模式
out.open("test.txt",ios::out|ios::in);//2,第二个参数可选
open方法的第二个参数可以设为:
参数 | 说明 |
---|---|
ios::in | 打开文件作为读操作 |
ios::out | 打开文件作为写操作 |
ios::binary | 打开文件以二进制的方式打开 |
ios::ate | 打开文件并且当前的位置为文件的末尾 |
ios::trunc | 如果已经打开文件,那么之前写入的流将被替换掉 |
ios::app | 写操作将在文件的末尾进行 |
2.2关闭
文件的关闭操作比较简单,只需要执行out.close()即可。
注意的是,文件只要打开之后,就必须在所有操作完成之后关闭,不然会引起异常。
2.3读取和写入
写入操作比较简单,跟cout的操作类似:
ofstream out;
out.open("test.txt");
out<<"test string"<<endl;
out.close();
读取操作稍微有点不同,具体的示例如下:
string line;
ifstream in;
in.open("test.txt");
if(in.is_open()){
while(getline(in,line)){
cout>>line<<endl;
}
}
in.close();
2.4定位
ifstream和ofstream中都包含了一个内部的变量用来保存下一个将要操作的元素位置。ifstream的称为get position,ostream的称为put position。注意的是,用来表示位置的类型是streampos或者streamoff类型,其中streampos类型在fpos中定义,并且能从streamoff转换而来或者转换成streamoff;streamoff是整型或长整型的别名。
2.4.1 ifstream
获取当前元素位置:tellg();
移动到指定位置:seekg(postion); or seek(offset,direction);其中direction的类型有三种:iso::beg,ios::cur,ios::end。
2.4.2 ofstream
获取当前元素位置:tellp();
移动到指定位置:seekp(postion); or seep(offset,direction);其中direction的类型有三种:iso::beg,ios::cur,ios::end。
2.4.3 示例
ifstream in("test.txt",ios::binary);
string str;
if(in.is_open()){
ios::streampos position=in.tellg();
std:cout<<"current position is"<<position<<endl;
in.seekg(10,ios::cur);
position=in.tellg();
std::cout<<"current position is"<<position<<endl;
std::cout<<"file length is"<<position<<endl;
}else{
std::cout<<"error"<<endl;
}
in.close();
2.4缓存
输入输出流保存在内存中,当缓存去满了或者关闭了或者有显式的操作(flush,endls)或者执行了sync方法都将会导致内存中保存的输入输出流写入物理介质中,比如磁盘。