程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放
通过文件可以将数据进行持久化操作
C++中对文件的操作需要包涵头文件:<fstream>
文件类型有两种:
- 文本文件:文件以文本的ASCII码的形式存储在计算机中
- 二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们
操作文件的三大类:
- ofstream:写操作
- ifstream:读操作
- Fstream:读写操作
# 一、写文件
步骤如下所示:
- 包涵头文件:
#include <fstream>
- 创建流对象:
ofstream ofs;
- 打开文件:
ofs.open("文件路径", 打开方式)
- 写数据:
ofs << "写入的数据"
- 关闭文件:
ofs.close()
打开方式:
文件打开方式可以配合使用,利用|
操作符,如使用二进制方式写文件:ios::binary | ios::out
#include "iostream"
#include "fstream"
using namespace std;
void makeFile() {
ofstream ofs;
ofs.open("test.txt", ios::out);
ofs << "Hello World!" << endl;
ofs.close();
cout << "执行成功" << endl;
}
int main() {
makeFile();
return 0;
}
# 二、读文件
步骤如下所示:
- 包涵头文件:
#include <fstream>
- 创建流对象:
ifstream ifs;
- 打开文件:
ifs.open("文件路径", 打开方式)
- 四种方式进行读取
- 关闭文件:
ifs.close()
//
// Created by Jacob Lee on 2021/12/23.
//
#include "iostream"
#include "fstream"
using namespace std;
void readFile() {
ifstream ifs;
ifs.open("test.txt", ios::in);
if (!ifs.is_open()) {
cout << "文件打开失败" << endl;
return;
}
// 读数据
// 方法一
char buf01[1024] = {0};
while(ifs >> buf01) {
cout << buf01 << endl;
}
// 方法二
char buf02[1024] = {0};
while(ifs.getline(buf02, sizeof(buf02))) {
cout << buf02 << endl;
}
// 方法三
string buf03;
while(getline(ifs, buf03)) {
cout << buf03 << endl;
}
// 方法四
char c;
while((c = ifs.get()) != EOF) {
cout << c;
}
ifs.close();
}
int main() {
readFile();
return 0;
}
# 三、二进制文件
以二进制的方式对文件进行读写操作
打开方式要指定为ios::binary
# 3.1二进制文件写
二进制方式写文件主要是利用流对象调用成员函数write
函数原型:ostream& write(const char * buffer, int len);
参数解释:字符指针buffer指向内存中的一段存储空间。len指的是读写的字节数
#include "iostream"
#include "fstream"
using namespace std;
class Person {
public:
char m_Name[64];
int m_Age;
};
int main() {
ofstream ofs;
ofs.open("person.txt", ios::out | ios::binary);
Person person = {"Lee", 18};
ofs.write((const char *)&person, sizeof(Person));
ofs.close();
return 0;
}
# 3.2二进制文件读
二进制方式读文件主要利用流对象调用成员函数read
函数原型:istream& read(char *buffer, int len);
参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数
//
// Created by Jacob Lee on 2021/12/23.
//
#include "iostream"
#include "fstream"
using namespace std;
class Person {
public:
char m_Name[64];
int m_Age;
};
int main() {
ifstream ifs;
ifs.open("person.txt", ios::in | ios::binary);
if (!ifs.is_open()) {
cout << "文件打开失败" << endl;
return 0;
}
Person person;
ifs.read((char *)& person, sizeof(Person));
cout << person.m_Name << endl;
cout << person.m_Age << endl;
ifs.close();
return 0;
}