必须使用ios::binary标志,否则windows下会错误转换换行符(n↔rn)并遇x1A截断,导致图片、音频等二进制数据损坏;应显式指定该标志,避免文本模式干扰。

二进制文件读写必须用 ios::binary 标志
不加这个标志,ifstream 或 ofstream 会默认按文本模式处理:windows 下自动把 n 转成 rn,读取时又反向转换;遇到 x1A(EOF 字符)直接截断。这对图片、音频、序列化对象等二进制数据是灾难性的。
实操建议:
- 所有二进制 I/O 必须显式指定
ios::binary,例如:ofstream fout("data.bin", ios::binary); - 文本文件可以省略该标志,但加上也无害;混用会导致不可预测的换行/截断问题
-
fread/fwrite(C 风格)默认就是二进制,无需额外设置,但需注意平台字节序和结构体对齐
std::String 和 std::vector 适合做二进制缓冲区
文本文件常用 std::string 存行或小段内容,但二进制数据可能含