C++写入文件时LF自动转为CRLF的问题咨询
解决Windows下fstream写入LF自动转为CRLF的问题
这是fstream的文本模式行为导致的,和std::string无关。Windows平台上,C++标准库的文件流默认采用文本模式,会自动将单个换行符LF(ASCII值10)转换为Windows系统的换行组合CRLF(ASCII值13+10),而CR(ASCII值13)不会被触发转换,这就是你看到原本3个LF变成3组CRLF、文件从预期6字节变成9字节的原因。
要禁用这种转换,只需在打开文件时添加std::ios::binary标志,明确以二进制模式操作文件:
修改后的示例代码:
std::ofstream outputFile(newFileLoc.bin, std::ofstream::out | std::ios::binary); std::string newLineNonsense = { 10, 10, 10, 13, 13, 13 }; outputFile << newLineNonsense; outputFile.close();
二进制模式下,所有字节都会原封不动地写入文件,不会进行任何格式转换,这样写入的内容就会和你预期的lf lf lf cr cr cr完全一致,文件大小也会保持6字节。
另外你提到切换字符集无效是正常的——这个问题的根源是文件打开模式,和字符集设置无关,只要指定二进制模式就能解决。
内容的提问来源于stack exchange,提问作者ClarkWorks
相关产品推荐
相关产品推荐

