博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C中文件操作的文本模式和二进制模式,到底有啥区别?
阅读量:4640 次
发布时间:2019-06-09

本文共 905 字,大约阅读时间需要 3 分钟。

在C中,使用fopen打开文件有两种模式:一种是文本模式,一种是二进制模式。那这两种模式之间有什么区别,是不是使用文本模式打开的文件就只能使用文本函数比如fprintf来操作,而使用二进制打开的文件就只能使用二进制函数比如fwrite来操作呢?

答案是否定的。C里面之所以有文本模式和二进制模式,完全是出于跨平台的需要。

 

文本模式的意义

众所周知,在Windows下,CTR+Z这个字符用来表示一个文件的结尾,而Unix下使用CTR+D。此时,如果使用文本模式打开一个文件,当读到CTR+Z这个字符时,C就能识别出这是文件结尾的标志,在Unix系统下也是一样,当读到CTR+D,C也知道这事文件结尾,这样就能兼容Windows和Unix两个平台了。而如果使用二进制模式打开同样的文件,当在Windows下读到CTR+Z,或者是在Unix下读到CTR+D,都只会被当成一个纯粹的字符来看待。

 

同样的事情也发生在newline的表示上。在Unix下,newline使用\n表示,在Windows下,newline使用\r\n表示,而在Mac下,newline使用\r表示。这样,当一个文件使用文本模式打开时,如果是读取文件,C会依据平台将\r\n或者\r自动转换成\n,在写入文件时,C会将\n依据平台自动转换成\r\n或者\r,这样就完成了跨平台的操作。而如果使用二进制模式来操作文件,C不会自动做这样的转换,读到\r\n就是\r\n,写入\n也不会自动变成\r\n。

 

fprintf和fwrite的区别

fprintf和fwrite都是将内容写入到文件,无论文件是以文本模式打开,或者二进制模式打开,它们都不关心,总之写入到文件中的都是一段0和1的编码,只是写入的内容会不一样。比如对于整数12345,fprintf和fwrite写入时,文件内容如下图所示:

上图表示的区别很明显,fprintf写入时是将12345的每一位的字符编码写入文件,而fwrite是直接将12345在内存中的表示写入文件。

 

转载于:https://www.cnblogs.com/chaoguo1234/p/9161494.html

你可能感兴趣的文章
查找一个字段所处的数据库及表
查看>>
第一周学习进度+四则运算1.0版
查看>>
baba 运动网
查看>>
for循环小练习
查看>>
JAE京东云引擎Git上传管理代码教程和京东云数据库导入导出管理
查看>>
教你如何迅速秒杀掉:99%的海量数据处理面试题
查看>>
高血压吃什么好?
查看>>
Java for LeetCode 047 Permutations II
查看>>
React工作原理
查看>>
JS 获取当前时间
查看>>
bzoj3238 [Ahoi2013]差异
查看>>
ASP.NET常见面试题及答案(130题)
查看>>
初学CDQ分治-NEU1702
查看>>
React组件的生命周期
查看>>
java笔记--使用SwingWoker类完成耗时操作
查看>>
Android应用程序后台加载数据
查看>>
2016北京集训测试赛(九)Problem C: 狂飙突进的幻想乡
查看>>
highcharts与highstock实例
查看>>
多重背包,附上例题(POJ - 1014 Dividing)
查看>>
HDU-5441-离线化并查集
查看>>