| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
买学问 - 大牛一对一辅导,有问必答买学问 - 专业的付费知识问答平台
共有 641 人关注过本帖
标题:文件打开方式r和rb的区别有哪些
只看楼主 加入收藏
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:5
帖 子:426
专家分:422
注 册:2018-9-4
结帖率:100%
  已结贴   问题点数:20  回复次数:4   
文件打开方式r和rb的区别有哪些
发表这个帖子的目的:(1)展示一下我的理解,大佬们帮忙看下,是否有哪里理解有误;
                   (2)用r和rb读一个文件时是否还有一些其他的不同之处;
                   (3)我知道,我搜到的文章观点或许不是很正确,也或许叙述不是很全面,也或许是我理解有偏差。如果大佬有一些相关的文章的话,推荐一下让我学习学习也好。

一开始并不理解文本文件和二进制文件的区别,就上网搜了下,得到结论:
1、文本文件: 写入时,无论原内容是何格式,均将其理解为单个字符的集合,将每一个字符的ASCLL码保存下来,这样打开文件时就很容易看出来保存的是什么内容;
2、二进制文件:写入时,按照原内容在机器中保存的方式进行保存,这样打开文件时就有可能看到一堆乱码,因为无论是什么格式,打开时都会被解释成字符,然后我就试了下,发现字符并不会出现这种问题,即无论保存在哪种文件中都能一眼看出来是什么内容,不会出现乱码,然而,数据会出现这种问题,要么是乱码,要么是一片空白,或二者兼有。
3、文本文件读写与二进制文件读写速度,当我们需要查看文件内容时,二进制文件需要进行相应的转换,文本文件就省去了转换时间,当机器需要读取文件中的数据时,文本文件需要进行相应的转换,二进制文件就省去了转换时间。
4、文本文件与二进制文件对内存的使用率,字符的话,二者是一样的,数据的话,文本文件将其理解为单个字符的集合,故每位数字都需要一个字节来存储,二进制文件会保留其格式,故其占(short/unsigned short)2、(int/unsigned)4、(long/unsigned long)8、(long long/unsigned long long)16位,因此二者会因内容的不同而对内存的使用效率不同。

再后来,我发现读一个二进制文件时用r和rb没有啥区别,都是一样的准确无误的读出其中内容(试了下直接打开文件,我忘了试下通过函数进行读取并输出),继续上网,看了很多文章、帖子,所有的文章中提到的都是换行符的问题(文本文件中存储的是\r\n,二进制文件中存储的是\n)。



有点啰嗦了哈...主要是刚接触,很多东西都不懂,无论大佬是否提供信息,首先要感谢大佬抽出时间来看这一大堆字

[此贴子已经被作者于2019-1-11 23:28编辑过]

2019-01-11 23:26
Mr_doge
Rank: 4
等 级:业余侠客
威 望:6
帖 子:139
专家分:293
注 册:2018-6-28
  得分:20 
如果没记错的话fopen()是rt以文本打开,rb和r默认是以二进制打开

字符在内存中存储的是ascii编码,不论是文本还是二进制打开文件,存入硬盘文件的依旧是ascii编码,这样直接打开文本文件自然会正常显示

数据二进制直接存入硬盘,直接文本阅读打开的时候会将二进制数据当作ascii编码对待,显示自然是乱码或空白,显示出奇怪的字符是刚好那个字节的数据对应了某个字符

直接二进制和文本模式的存储,区别确实仅在数据和换行罢了,换行的区别就在\r\n这两字符,windows的文本文件换行默认是\r\n,linux和unix默认是\n,OSX默认是\r,如果你想以二进制直接读写也能实现以文本模式读写一样的效果,完全可以自行处理数据的字符转换和换行字符填充,这样就会以二进制模式读写产生文本模式读写一样的效果,实际上后者的原理便是如此。

当然二进制和文本文件的读写虽然差异很小,不过还是有差异的,尤其是有精确要求的情况下,在C语言环境下这些所有细节都由编程者自行处理,这便是自由的代价,C编译器只会作基本的语法检查,只要编译通过,一切结果都将由编程者自行把握,你可以创造它能做到的一切,但是这一切每一点每一滴都将由你自己亲自完成,这也是C所谓"繁琐"和"效率低"以及"面向过程编程"的由来
2019-01-14 09:37
lin5161678
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:15
帖 子:521
专家分:1861
注 册:2011-12-3
  得分:0 
以下是引用Mr_doge在2019-1-14 09:37:25的发言:

如果没记错的话fopen()是rt以文本打开,rb和r默认是以二进制打开

单独 r 默认是 rt
2019-01-15 13:44
lin5161678
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:15
帖 子:521
专家分:1861
注 册:2011-12-3
  得分:0 
以下是引用Mr_doge在2019-1-14 09:37:25的发言:

直接二进制和文本模式的存储,区别确实仅在数据和换行罢了

不只是换行
2019-01-15 13:45
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:5
帖 子:426
专家分:422
注 册:2018-9-4
  得分:0 
回复 6楼 lin5161678
还有啥?
2019-01-16 11:00







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026221 second(s), 8 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved