在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在内存中的表示写入文件。

C中文件操作的文本模式和二进制模式,到底有啥区别?的更多相关文章

  1. python中文件操作的六种模式及对文件某一行进行修改的方法

    一.python中文件操作的六种模式分为:r,w,a,r+,w+,a+ r叫做只读模式,只可以读取,不可以写入 w叫做写入模式,只可以写入,不可以读取 a叫做追加写入模式,只可以在末尾追加内容,不可以 ...

  2. php中文件操作常用函数有哪些

    php中文件操作常用函数有哪些 一.总结 一句话总结:读写文件函数 判断文件或者目录是否存在函数 创建目录函数 file_exists() mkdir() file_get_content() fil ...

  3. python中文件操作的其他方法

    前面介绍过Python中文件操作的一般方法,包括打开,写入,关闭.本文中介绍下python中关于文件操作的其他比较常用的一些方法. 首先创建一个文件poems: p=open('poems','r', ...

  4. java中文件操作的工具类

    代码: package com.lky.pojo; import java.io.BufferedReader; import java.io.BufferedWriter; import java. ...

  5. python中文件操作的基本方法

    在python中对一个文件进行操作,分为三大步:打开,操作,关闭 首先创建一个文件hello,里面内容为hello world 一.打开一个文件 1.#open(‘文件名或文件路径’,‘操作模式’,文 ...

  6. Python 中文件操作

    上代码: import os import os.path rootdir = "d:/code/su/data" # 指明被遍历的文件夹 for parent,dirnames, ...

  7. java中文件操作《一》

    在日常的开发中我们经常会碰到对文件的操作,在java中对文件的操作都在java.io包下,这个包下的类有File.inputStream.outputStream.FileInputStream.Fi ...

  8. Xshell6远程访问linux及Xftp6远程针对linux系统中文件操作(附图文详解)

    1.首先我们需要先做好前期准备工作,需要到XManager6官网上将Xshell及Xftp下载并安装,安装过程一直下一步就好了.这里是其官网:http://www.xshellcn.com/.安装完成 ...

  9. Python中文件操作2——shutil模块

    1 文件操作 文件有很多的操作,之前的文件操作中介绍了内建函数对文件的打开.读取以及写入,这三种操作是对文件基本的使用.文件还有复制.删除.移动.改变文件的属主属组等操作.下面主要看os模块和shut ...

随机推荐

  1. 执行SQL查询导致磁盘耗尽故障演示

            a fellow in IMG wechat group 2 met an error about running out of disk space when using MySQL ...

  2. 前端String转json

    1.data = eval("("+data+")");2.JSON.parse(data);

  3. python 基于Anaconda import numpy 报错 Importing the multiarray numpy extension module failed.

    在windows中安装了 Anaconda 运行时报错 原因是系统环境变量起初并没有引入 E:\Tools\Anaconda\Library\bin 解决办法: 在系统环境变量中加入    E:\To ...

  4. windows service 2012:搭建FTP服务器

    最近公司将服务器从线上移植到线下每次上传项目都要进入服务器感觉好麻烦, 所以就想搭建一个FTP的站点来管理项目,弄这个之前首先要关闭我们的windows service 2012 服务器的防火墙,只有 ...

  5. mysql 库和表占用空间查询

    1. 查看该数据库实例下所有库大小,得到的结果是以MB为单位 as sum from information_schema.tables; 2.查看该实例下各个库大小 as total_mb, as ...

  6. django使用pycharm为项目选择虚拟环境-3.1

    使用pycharm打开项目 选择右上角的 file - settings - project - project interpreter 选择左上的设置符号,选择 Add 选择红框部分,然后选择之前创 ...

  7. Python 爬虫 (二)

    cookiejar模块: 管理储存cookie,将传出的http请求添加cookie cookie存储在内存中,CookieJar示例回收后cookie将自动消失 实例:用cookjar访问人人网主页 ...

  8. java常见类

  9. gp与 pg 查询进程

    select now()-query_start as cost_time,* from pg_stat_activity where current_query not in ( '<IDLE ...

  10. .Net 面试题 汇总(五)

    1.简述javascript中的“=.==.===”的区别? =赋值 ==比较是否一般相等 "3"==3 //会做类型的隐式转换,true ===比较是否严格相等 "3& ...