参考:
- C++primer第五版8.2,P283
1 使用文件流对象
头文件<fstream>定义了三个类来进行文件的输入输出:
类 | 功能 |
---|---|
ifstream | 从文件输入流中读取数据 |
ofsteram | 向文件输出流中写入数据 |
fstream | 继承了ifstream和ofstream |
这些类提供的操作与我们之前使用过的cin和cout的操作一样,此外,它们还增加了一些新的函数来管理与流相关的文件:
//下面的fstream是ifstream、ofstream、fstream中的一种
//创建一个未绑定文件流的fstream对象
fstream fstrm1;
//将fstream1与文件filename关联,文件模式为mode
fstrm1.open(filename,mode);
//创建一个fstream对象,并与文件filename关联,默认文件模式与fstream的具体类型有关
fstream fstrm2(filename);
//创建一个fstream对象,与filename文件关联,文件模式为mode
fstream fstrm3(filename,mode);
//关闭与fstrm关联的文件流
fstrm1.close();
2 文件打开模式
每个流都有一个关联的文件模式,用来指出如何使用文件:
2.1 读写模式
(1)头文件:包含头文件 #include<iostream>和 #include<fstream>
(2)只从文件读取: in方式
判断读取文件尾:
while (fin >> data&&!fin.eof())
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream fin;
int data;
fin.open("d:\\test.txt",ios::in);
fin >> data;
fin.close();//注意必须关闭文件
}
(3)写入到文件中:out方式和app方式
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ofstream fout;
int data = 10;
fin.open("d:\\test.txt",ios::out); //文件全部清空再写入
//fin.open("d:\\test.txt",ios::app); //追加方式
fout << data;
fout.close();//注意必须关闭文件
}
(3)同时从文件中读取写入 : ios::out | ios::in方式
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
fstream f;
f.open("d:\\test.txt", ios::out | ios::in);
f.close();//注意必须关闭文件
}
2.二进制模式
(1)打开方式与文本文件类似,只需加上ios::binary
fstream f;
f.open("d:\\test.txt",ios::binary| ios::out | ios::in);
(2)seekp()、seekg()、tellp()、tellg()
ostream& seekp( streampos pos );
ostream& seekp( streamoff off, ios::seek_dir dir );
istream& seekg( streampos pos );
istream& seekg( streamoff off, ios::seek_dir dir );
参数说明:
pos:新的文件流指针位置值
off:偏移量:单位是字节
dir:搜索的起始位置
dir取值:
ios::beg:文件流的起始位置
ios::cur:文件流的当前位置
ios::end:文件流的结束位置
tellp()返回读指针位置(字节数)
tellg()返回写指针位置(字节数)
(3)通过read()和write()进行读写
int data;
f.read((char*)& data, sizeof(data));
或 f.write((char*)& data, sizeof(int));