程序运行时产生的数据都属于临时数据,通过文件可将数据持久化
C++中对文件操作需要包含头文件
文件类型分为两种:
操作文件的三大类:
步骤:
#include
ofstream ofs;
ofs.open("文件路径", 打开方式);
ofs<<"写入数据";
ofs.close();
文件打开方式
注意:文件打开方式可以配合使用,利用 | 操作符
例如:用二进制方式写文件 ios:: binary | ios:: out
- void test01()
- {
- ofstream ofs;
- ofs.open("test.txt", ios::out);
- ofs << "名字:" << "哈哈" << endl;
- ofs << "性别:" << "男" << endl;
- ofs << "年龄:" << "18" << endl;
- }
读文件步骤如下:
#include
ifstream ifs;
ifs.open("文件路径", 打开文件);
四种方式读取
ifs.close();
读文件可以利用ifstream,或者fstream类
利用is_open函数可以判断文件是否打开成功
close关闭文件
注意:读数据方式3中getline(ifs, buf)需要引用头文件#include
- void test02()
- {
- ifstream ifs;
- //打开文件
- ifs.open("test.txt", ios::in);
- //判断文件是否打开成功
- if (!ifs.is_open())
- {
- cout << "读取文件失败!" << endl;
- return;
- }
- //读数据
- //方式1
- /*char buf[1024] = { 0 };
- while (ifs >> buf)
- {
- cout << buf << endl;
- }*/
-
- //方式2
- /*char buf[1024] = { 0 };
- while (ifs.getline(buf, 1024))
- {
- cout << buf << endl;
- }*/
-
- //方式3
- string buf;
- while (getline(ifs, buf))
- {
- cout << buf << endl;
- }
- //方式4
- char c;
- while ((c = ifs.get()) != EOF) //end of file
- {
- cout << c;
- }
- //关闭文件
- ifs.close();
- }
二进制写文件主要利用流对象调用成员函数write
函数原型:ostream& write(const char* buffer, int len);
参数解释:字符指针buffer指向内存中一段存储空间,len是读写的字节数
- class Person
- {
- public:
- char m_Name[64];
- int m_Age;
- };
-
- void test01()
- {
- //打开文件方式1
- /*ofstream ofs;
- ofs.open("person.txt", ios::out | ios::binary);*/
- //打开文件方式2
- ofstream ofs("person.txt", ios::out | ios::binary);
- //写文件
- Person p = { "张三", 18 };
- ofs.write((const char*)&p, sizeof(Person));
- //关闭文件
- ofs.close();
- }
二进制方式读文件主要利用流对象调用成员函数read
函数原型:istream& read(char *buffer, int len);
参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数
- class Person
- {
- public:
- char m_Name[64];
- int m_Age;
- };
- void test02()
- {
- ifstream ifs;
- ifs.open("person.txt", ios::in | ios::binary);
- if (!ifs.is_open())
- {
- cout << "打开文件失败!" << endl;
- return;
- }
- Person p;
- ifs.read((char*)&p, sizeof(Person));
- cout << "姓名:" << p.m_Name << ", 年龄:" << p.m_Age << endl;
- ifs.close();
- }