为了永久保存数据,或从之前保存的数据中获取数据。常常需要对文件进行操作,下面对常用的内容进行总结。
1.打开和关闭文件
要操作文件,首先要打开和关闭文件。
c++ 有两种方式打开文件
第一种:
使用带有文件路径的构造函数,其内部会自动打开文件
fstream file(filePath);
第二种:
先创建一个 fstream 对象,然后调用 open 函数,传入文件路径
fstream file;
file.open(filePath);
两种方式关闭文件
第一种:
超出 fstream 对象作用域,在析构函数中,会自动调用 close 关闭文件
第二种:
主动调用 close 函数
file.close();
为了方便和安全性,在打开文件的时候可以设置,打开方式,以防止获得太大的权限,对文件执行超出预期的操作。
下面列举常用的打开方式
ios::in 只能读文件
ios::out 只能写文件
ios::app 以追加的方式打开文件,不用这个标识符打开文件,会把文件之前的内容删除
ios::binary 以二进制方式打开文件(默认是以文本文件方式打开),这种方式只会写入和读出用户预期的二进制,而不会自动加上一些符号。(第二篇参考文件有介绍)
ios::trunc 如果文件以存在,则删除该文件
ofstream, ifstream 和 fstream 默认打开方式为
ofstream ios::out | ios::trunc
ifstream ios::in
fstream ios::in | ios::out
2.读和写文件
读和写有两种方式,一种是通过符号重载 “<<”(插入器), “>>”(析取器);一种是通过函数 read 和 write.
write ( char * buffer, streamsize size ); // 将 buffer 里面的 size 大小的数据,写入文件
read ( char * buffer, streamsize size ); // 将文件 size 大小的数据,读入 buffer 中
ofstream &put(char ch); // 写一个字符
ifstream &get(char &ch); // 读一个字符
gcount 获取最近一次 read 的字符数
3.移动读和写的索引位置
默认情况下,打开文件时,读索引的位置为 0,你读几个字节,索引就往后移动几个字节。
写文件时,默认写索引的位置也为 0,如果你打开文件的模式是 app,则写索引的位置在文件的最后面,也随着写入的字符数,自动往后移动。
但是当你想要自动改变当前读和写索引的位置时,则需要调用 seekg (seek get)和 seekp (seek put),seekg 改变读索引的位置,seekp 改变写索引的位置。
下面这种形式,是默认将读写文件索引,定位到距离文件开始处 position 的位置处。
seekg ( pos_type position );
seekp ( pos_type position );
下面这种形式,可以从三个参照系中,选择一个,进行偏移。
seekg ( off_type offset, seekdir direction );
seekp ( off_type offset, seekdir direction );
三个参照系分别是:
ios::beg 从流开始位置计算的位移
ios::cur 从流指针当前位置开始计算的位移
ios::end 从流末尾处开始计算的位移
4.获得当前读写索引的位置
tellg
tellp
5.标志
读写文件时,有些标志位需要片段,比如打开文件是否成功,是否读写到文件末尾等等。
file.eof(); //检测是否到文件末尾
file.is_open(); // 文件是否打开
file.bad(); // 读写过程中是否出错
参考文献:
https://developer.aliyun.com/article/75534
https://www.cnblogs.com/litaozijin/p/6582048.html