C++文本流fstream在Linux和Windows中换行的处理问题
来源:互联网 发布:think in java第五版 编辑:程序博客网 时间:2024/06/06 15:04
最近在工作老是重复复制粘贴一些固定格式代码,就写个自动生成这些固定格式代码的小工具,发现个问题,就是程序在Windows中写linux下的配置文件,出现回车换行(\r\n)和换行(\n)问题。
在程序写完两个配置文件后,打开其中一个配置文件发现每一行都有这个符号:(^M),然后查了下,把这些捋了下:
windows由于历史原因文本文件中换行用(\r\n),就是一个回车\n定位到行首,然后换行\r到下一行相同位置。
linux/unix中换行用(\n)就是一个\n直接定位到下一行行首。
c++写入文本的时候
</pre></p><p><span style="white-space:pre"></span><pre name="code" class="cpp"><span style="font-family:Microsoft YaHei;"><span style="white-space:pre"></span><span style="white-space:pre"></span><span style="font-size:18px;">ofstream ofstre;<span style="white-space: pre;"></span><strong>ofstre.open(this->metadataFileName,ofstream::app);</strong>if(ofstre.is_open()){ofstre<<"\n";ofstre.flush();ofstre.close();}else{cout<<"=====写入文件异常====="<<endl;ofstre.close();return n_acmanager::RETURN_FAILED;}return n_acmanager::RETURN_SUCCESS;</span></span>
这段默认以文本形式打开文件,会自动把代码中输出换行转化为相应系统的换行(\n或者\r\n)
如果想要在DOS环境下输出换行不自动转换为(\r\n),则要以二进制的形式打开文件:
<span style="font-family:Microsoft YaHei;font-size:18px;"><span style="white-space: pre;"></span><strong>ofstre.open(this->metadataFileName,ofstream::app | ofstream::binary);</strong></span>
但是如果这样操作DOS格式的文本文件就会引起个小问题,像vim这种能识别文本文件格式的程序就会把他识别成unix格式文件,进而隐藏的^M就会被显示出来。
写入前识别为DOS格式:
写入后识别为UNIX格式:
linux下用cat -v filename 就能完整查看文本文件完整换行符
0 0
- C++文本流fstream在Linux和Windows中换行的处理问题
- 关于linux下的普通文本在windows下缺少换行问题
- python文本处理中\r回车\n换行的问题
- Linux文本换行的问题
- Linux和windows中的换行符差异问题 LINUX的换行符在Windows记事本打开不换行或出现黑点
- windows文本在linux上处理异常问题
- windows换行和linux换行的转换
- 回车和换行在windows和linux下的区别
- Linux和Windows的换行
- 换行符在Linux和Windows下的区别
- 换行符在Linux和Windows下的区别
- Windows和linux换行符差异导致的问题
- [难题]windows 、linux 和 Mac 的换行问题
- 一个python处理dos和unix格式文本的换行的问题
- windows和linux中换行符的转换
- 在SurfaceView中绘制文本时 无法自动换行问题的解决办法
- Linux文本在windows中显示乱码的解决方法
- windows Linux的会车换行问题
- Android 下Spinner下拉框创建方法
- 交叉编译libx264,用于arm上视频采集的h264编码。
- SpringMVC如何准备数据
- hadoop2.6.0 namenode格式化报错
- Fragment笔记和源码阅读
- C++文本流fstream在Linux和Windows中换行的处理问题
- Retrofit 实现上传下载文件
- Best Time to Buy and Sell Stock - LeetCode 121
- hibernate
- JavaScript深入浅出学习笔记(二)—表达式和运算符
- 10、套接字socket的编程(学习笔记)
- CPU常用寄存器
- git入门
- 原码, 反码, 补码 详解