文本文件与二进制文件区别 r 与 rb 方式 w 与 wb方式(windows)—————— 开开开山怪

文件属于外存的范畴:

其实不管是文本文件还是二进制的文件,其本质都是以二进制的方式进行存储的,只是解释的方式不同罢了,文本文件是将原本的二进制解释称文本文件的方式(也就是ASCII的方式),而二进制就是存储的时候什么样子,打开就是什么样子。

1. < w 和 wb方式打开文件并进行写的操作的区别>

最常听到回答就是:

r 是以文本文件的方式打开并且是只读方式打开
rb 是以二进制的凡是打开并且是只读方式打开
w 是以文本文件的方式打开并且是写的方式
wb 是以二进制的方式打开并且是写的方式

既然有两种方式存在,那么必然有不同之处。以r 或 rb方式打开并且进行读取操作并没有什么区别;以w 或 wb方式打开文件进行写入操作也没有什么区别,仅仅只是在对’\n’这个字符的读和写上存在区别

1.【将文件以w方式打开(即文本文件的方式)】

不论采用fprintf()函数或者是fwrite()函数进行将’\n’字符写进文件,因为计算机都是采用二进制进行数据的存储,所以会显示0D 0A (0D表示一个字节,采用的是16进制表示),因为是以文本文件的方式进行打开,并且进行写入,所以文本文件对’\n’单个字符的处理是将’\n’ 变成了’\r\n’两个字符,所以在存储的形式是0D 0A,也相当于是两个字节。

2.【将文件以wb方式打开(即以二进制的方式)】

不论采用fprintf()函数还是fwrite()函数进行将’\n’字符写进文件,此时的存储形式为0A,
只有一个字节,所以二进制文件对’\n’字符的处理是按照它本身进行处理。

3.【总结】

w 和 wb 方式的唯一区别仅仅在于对’\n’字符的处理:
w方式写一个字符’\n’的时候,写进磁盘的是0D 0A(相当于写了在磁盘中写了两个字节)。
wb方式写一个字符’\n’的时候,写进磁盘的是0A(在磁盘中写了一个字节)。

2. < r 和 rb方式打开文件并进行读取操的区别>

1.【 将文件以r方式打开 】

不论采用fscanf()函数还是fread()函数进行读取,因为是以文本文件的方式进行打开,如果最初是采用w方式进行写进文件的,那么此时读取一个字符(也相当读取一个字节)的时候,将内存中的0D 连同下一个字节0A一块解释为’\n’,如果最初是以Wb方式写的,那么此时读取一个字符(也相当一个字节)的时候就仅仅只读一个0A,因为写进去的时候就只有0A。

2.【 将文件以rb方式打开 】

不论是采用fscanf()函数还是fread()函数进行读取时,因为是以二进制文件方式进行打开,所以当读取一个字符(也相当于一个字节的时候)事实上就读内存中的一个字节,所以如果当初写进文件采用的是w方式,内存中是0D 0A 但是此时只读一个0D,如果当初采用WB方式写入文件的此时也只读一个0A,因为只有0A。

3.【 总结 】

r 和 rb方式的区别也仅仅在于读取’\n’字符
r方式读取一个字符的时候,遇到0D会将后面0A这个字节连0D总共两个字节一起解释为一个字符’\n’
rb方式读取一个字符的时候,是正儿八经读一个字节,将读到的一个字节解释为字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值