1、 定义数据流对象指针
对文件进行读写操作首先必须要定义一个数据流对象指针,数据流对象指针有三种类型,它们分别是:
- Ifstream:表示读取文件流,使用的时候必须包含头文件“ifstream”;
- Ofstream:表示文件写入流,使用的时候必须包含头文件“ofstream”;
- Fstream:表示文件读取/写入流,使用的时候必须包含头文件“fstream”;
2. 打开文件
使用open函数打开一个文件
void open(const char * filename, ios_base::openmode mode = ios_base::in | ios_base::out);
void open(const wchar_t *_Filename, ios_base::openmode mode = ios_base::in | ios_base::out, int prot = ios_base::_Openprot);
打开文件的模式
[ios::in] | [ 为输入(读)而打开文件 ] |
---|---|
[ios::out | [为输出(写)而打开文件 ] |
[ios::ate] | [初始位置:文件尾] |
[ios::app] | [所有输出附加在文件末尾] |
[ios::binary] | [二进制方式] |
[ios::trunc] | [如果文件已存在则先删除该文件] |
3. 文件的读写操作
与C++的iostream读入与读出一样,只需要使用流操作符<<与>>就可以实现读出与读入
根据文件的读写状态,共有四个函数可供我们查看当前的读写状态
函数 | 作用 |
---|---|
bad() | 如果在读写的过程中出错,返回true |
fail() | 与bad()差不多,除了在出现错误的时候,在读写的过程中出现格式错误,例如你要读取一个整数却读取了一个字母,返回true |
eof() | 如果读到了文件末尾,返回true |
good() | ```这个是最通用的,以上三个函数返回false的话,这个函数返回true |
判断读到文件末尾举例
ifstream in;
in.open("1.txt",ios::in);
int a;
while(in>>a){
if(in.eof())
break;
cout<<a;
}
4. 随机文件读写
tellg() 获取当前get指针的位置
tellp() 获取当前put指针的位置
两者返回的都是int值
skeeg(int position) 设置get指针的位置
skeep(int position) 设置put指针的位置
这两种写法是相对于文件开始的绝对位置偏移量
另外还有两种写法
skeeg(int offect, * direction)
skeep(int offect, * direction)
direction是一个具体的指针位置,他们是下图的三种类型
指针 | 位置 |
---|---|
ios::beg | 文件开始位置 |
ios::cur | 文件当前位置 |
ios::end | 文件末尾位置 |
5. 关闭文件
调用close()就可关闭文件