为什么C++ ofstream write()方法会修改我的原始数据?

Gra*_*oob 6 c++ file-io visual-studio

我在内存中的char []缓冲区中有一个jpeg图像,我需要做的就是将其完全按原样写入磁盘.现在我正在这样做

ofstream ofs;
ofs.open(filename);
ofs.write(buffer, bufferLen);
ofs.close();
Run Code Online (Sandbox Code Playgroud)

但是图像没有正确显示,到处都是随机的黑白条纹.在十六进制查看器中将图像与原始图像进行比较后,我发现当它认为我正在编写换行符时,ofstream正在修改数据.0x0A出现在原始位置的任何地方,ofstream写入两个字节:0x0D0A.我必须假设ofstream打算只从LF转换为CRLF,有没有一种标准的方法让它不这样做?

sth*_*sth 9

你应该设置文件模式,binary当你打开它:

std::ofstream file;
file.open("filename.jpg", std::ios_base::out | std::ios_base::binary);
Run Code Online (Sandbox Code Playgroud)

这样,流不会尝试将换行符调整为原生文本格式.


cjc*_*ela 5

尝试打开ofstream作为二进制文件.这样的事情应该有效:

ofstream ofs;
ofs.open(filename, ios::out | ios::binary);
ofs.write(buffer, bufferLen);
ofs.close();
Run Code Online (Sandbox Code Playgroud)