程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放
通过 文件可以将数据持久化
C++中对文件操作需要包含头文件
<fstream>
文件类型
- 文本文件 --文件以文本的ASCII码形式存储在计算机中
- 二进制文件 – 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们
文件打开方式
打开方式 | 解释 |
---|---|
ios::in | 只为读 |
ios::out | 只为写 |
ios::ate | 初始位置:文件尾部 |
ios::app | 追加方式写文件 |
ios::trunc | 如果文件存在先删除,再创建 |
ios::binary | 二进制方式 |
注:文件打开方式可以配合使用,利用|操作符
例如:用二进制的方式写文件
ios::binary | ios::out
操作文件
- ofstream 写操作
- ifstream 读操作
- fstream 读写操作
文本文件操作
写文件
- 包含头文件
#include <fstream>
- 创建流对象
ofstream ofs;
- 打开文件
ofs.open("文件路径",打开方式);
//这里的文件路径是C风格的字符串
- 写数据
ofs<<"写入的数据";
- 关闭文件
ofs.close();
读文件
- 包含头文件
#include <fstream>
- 创建流对象
ofstream ifs;
- 打开文件
ifs.open("文件路径",打开方式);
//这里的文件路径是C风格的字符串
- 读数据(四种方式)
- 关闭文件
ifs.close();
注:读取的仍是C字符串形式,用char[]接收
ifstream ifs;
string str;
while (getline(ifs, str))
{
cout << std << endl;
}
以上针对文本文件!
二进制文件操作
写文件
class Person
{
public:
char m_Name[64];
int m_Age;
};
void test01()
{
ofstream ofs("person.txt", ios::out | ios::binary);
Person p = { "张三",18 };
ofs.write((const char *)&p, sizeof(Person));
ofs.close();
}
读文件
void test01()
{
ifstream ifs;
ifs.open("Person.txt", ios::in | ios::binary);
if (!ifs.is_open())
{
cout << "打开失败" << endl;
}
Person p;
ifs.read((char*)&p, sizeof(Person));
cout << p.m_Age << " " << p.m_Name << endl;
ifs.close();
}