用std::ifstream和std::ofstream逐块读写最稳妥,需以binary模式打开、控制块大小(如64KB)、每次read后用gcount()获取真实字节数、检查流状态,避免截断或重复。

大文件合并:用 std::ifstream 和 std::ofstream 逐块读写最稳妥
直接用 std::ios::binary 模式打开文件,避免文本换行符干扰和缓冲区截断。关键不是“一次读完”,而是控制块大小——64KB 是多数系统下兼顾性能与内存安全的折中值(太小导致 syscall 过多,太大可能在嵌入式或低内存环境触发 bad_alloc)。
常见错误是忘记检查 read() 实际读取字节数,导致末尾数据重复或丢失;也有人误用 gcount() 前不调 clear(),在 EOF 后仍返回上一次计数。
- 每次
read()后必须调用in.gcount()获取真实读取长度,而非假设等于缓冲区大小 - 写入前检查
out.good(),尤其在循环中——磁盘满、权限丢失等错误不会立刻抛异常,但会置位failbit - 不要用
in >> buffer或getline()处理二进制数据,它们会提前终止于