加载中…
个人资料
bluemonster
bluemonster
  • 博客等级:
  • 博客积分:0
  • 博客访问:289,146
  • 关注人气:39
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

文本模式读写文件中\r和\n的问题

(2010-08-09 16:20:31)
标签:

文本模式

读写文件

r

n

回车换行

ultraedit

dos

分类: 实验室

DOS文件(windows格式文件)中,按一下ENTER就是输入了\r\n,这就是回车换行

MAC文件里,用\r换行

UNIX文件里,用\n换行

自己尝试了一些\r \n的组合,归纳了下规律:

windows下用文本方式文件时

缓冲区里的\n或者\r都会被自动替换为\r\n写入文件,即使是连着的\r\n,也会被替换成\r\n\r\n(但是msdn上面只说\r被替换为\r\n,我的前面一篇博文里有原文)

windows下用文本方式文件时

文件中的\r\n自动替换为\n存放到缓冲区里(这点和msdn是符合的,前面的博文里有原文)

\r不会被替换

 

假设要读取的文件流长度小于缓冲区长度

如果用fread文本模式读文件,\r\n被替换为\n读进缓存区里

如果是fgets文本模式读文件,碰到第一个\n(这里的\r和\n都是指经过转换后读入缓冲区的,即\r\n被替换为\n)后停止读取,缓存区里存放的是\n之前的字符串(包括这个\n以及之前所有的\r)

 

fread和fwrite的返回值问题

文本模式写文件时,\n或\r自动替换成\r\n,但是fwrite的返回值里还是算写了一个字符(和msdn符合,前面一篇博文有原文)

文本模式读文件时,\r\n被自动替换为\n,但是也算是读了一个字符(和msdn的不一样,msdn是说算读了2个,前面的博文里有原文)

 

如果用UltraEdit打开文本文件有时候会碰到询问你是否要转换为DOS文件,其实就是回车换行符的问题了。做了如下表的尝试,但是规律不太好总结啊。

 

要写入的字符

实际写入的字符(即\n被替换为\r\n后)

Ultraedit转换为DOS格式后的文件内的实际字符

\r

\r

\r\n

\n

\r\n

未提示转换为DOS文件

\r\n

\r\r\n

\r\n

\n\r

\r\n\r

未提示转换为DOS文件

\n\r\n

\r\n\r\r\n

\r\n\r\n

\n\r\n\r

\r\n\r\r\n\r

\r\n\r\n

\n\r\n\n\r

\r\n\r\r\n\r\n\r

\r\n\r\n\r\n\r\n

\r\r\n\n

\r\r\r\n\r\n

\r\n\r\n\r\n

\r\r\r\n\r\n

\r\r\r\r\n\r\r\n

\r\n\r\n\r\n\r\n

\n\r\r

\r\n\r\r

\r\n\r\n\r\n

\n\r\r\r\r

\r\n\r\r\r\r

\r\n\r\n\r\n\r\n\r\n

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有