在 C++ 中,文件按照存储方式分为文本文件(text file)和二进制文件(binary file),它们在存储格式、读写方式和适用场景上有显著区别。
1、文本文件(Text Files)
特点
存储格式:以可读字符(ASCII 或 Unicode)形式存储数据。
换行符:不同系统使用不同的换行符(Windows:\r\n,Unix/Linux:\n)。
可读性:可以直接用文本编辑器打开查看。
适用场景
存储配置信息、日志、人类可读的数据(如 CSV、JSON)。
与其他程序或系统交换数据。
读写方式
使用 ifstream(输入)或 ofstream(输出),默认以文本模式打开:
应用举例:
#include
// 写入文本文件
ofstream outFile(“data.txt”);
outFile << “Hello, World!\n”; // 自动转换为系统特定的换行符
outFile << 12345; // 数字会被转换为字符序列 “12345”
outFile.close(); // 文件关闭
// 读取文本文件
ifstream inFile(“data.txt”);
string line;
getline(inFile, line); // 自动处理系统特定的换行符
int num;
inFile >> num; // 字符序列 “12345” 会被转换为整数
inFile.close(); // 文件关闭
2、二进制文件(Binary Files)
特点
存储格式:精确存储内存中的原始数据,以二进制位 形式存储数据,与内存中的表示完全一致。
无转换:不处理换行符或其他字符转换。
不可读性:适合存储结构化数据或原始字节,直接用文本编辑器打开会显示乱码。
适用场景
存储大量数据(如图片、音频、视频)。
快速读写或存储程序内部数据(如对象序列化)。
读写方式
使用 ifstream 或 ofstream,并指定 ios::binary 模式,通常使用 read() 和 write() 方法:
应用举例:
#include
struct Data {
int id;
float value;
};
// 写入二进制文件
Data obj = {42, 3.14f};
ofstream outFile(“data.bin”, ios::binary);
outFile.write(reinterpret_cast<const char*>(&obj), sizeof(obj));
outFile.close();
// 读取二进制文件
Data readObj;
ifstream inFile(“data.bin”, ios::binary);
inFile.read(reinterpret_cast<char*>(&readObj), sizeof(readObj));
inFile.close();
3、文本文件与二进制文件的本质区别