程序运行时产生的数据都属于临时数据,程序一旦运行结束,数据都会被释放,通过文件可以将数据持久化
C++ 中对文件操作需要包含头文件 < fstream >
文件类型分为两种:
- 文本文件: - 文件以文本的ASCLL码形式存储在计算机中;
- 二进制文件:- 文件以文本的二进制形式存储在计算机中;
(用户不能直接读懂它们)
操作文件的三大类:
- ofstream: 写操作
- ifstream: 读操作
- fstream: 读写操作
文本文件
写文件
写文件步骤如下:
- 包含头文件
#include < fstream >- 创建流对象
ofstream ofs;- 打开文件
ofs.open(“文件路径”,打开方式);- 写数据
ofs<<“写入的数据”;- 关闭文件
ofs.close();
文件打开方式:
打开方式 | 解释 |
---|---|
ios::in | 为读文件而打开文件 |
ios::out | 为写文件而打开文件 |
ios::ate | 初始位置:文件尾 |
ios:app | 追加方式写文件 |
ios::trunc | 如果文件存在,先删除,后创建 |
ios::binary | 二进制方式 |
注意:文件打开方式可以配合使用,利用 | 操作符
例如:用二进制方式写文件 ios::out | ios::binary
读文件
读文件步骤如下:
- 包含头文件
#include < fstream >- 创建流对象
ifstream ifs;- 打开文件并判断文件是否打开成功
ifs.open(“文件路径”,打开方式);- 读数据
四种读取方式- 关闭文件
ifs.close();
文件的四种读取方式:
char buf[1024] = {0};
while( ifs >> buf ){
cout << buf << endl;
}
char buf[1024] = {0};
while( ifs.getline(buf, sizeof(buf)) ){
cout << buf << endl;
}
string buf;
while(getline(ifs,buf)){
cout << buf << endl;
}
char c;
while( (c = ifs.get()) != EOF ){
cout << buf << endl;
}
EOF == end of file ( 文件尾部 )
二进制文件
以二进制的方式对文件进行读写操作;
打开方式要指定为 ios::binary
写文件
写文件步骤如下:
- 包含头文件
#include < fstream >- 创建流对象
ofstream ofs;- 打开文件
ofs.open(“文件路径”,ios::out | ios::binary );- 写数据
Person p = new Person(“张三”,17);
ofs.write((const char*)&p,sizeof(Person) );- 关闭文件
ofs.close();
读文件
读文件步骤如下:
- 包含头文件
#include < fstream >- 创建流对象
ifstream ifs;- 打开文件并判断文件是否打开成功
ifs.open(“文件路径”,ios::in | ios::binary );- 读数据
Person p;
ifs.read((const *)&p,sizeof(Person))- 关闭文件
ifs.close();