首先要明白一点,就是无论你用哪种语言进行程序设计,也无论你用哪个函数进行文件操作(库函数也好,直接操作系统API也好),最终的文件打开的操作都是由操作系统来进行的,因此各种语言的情况从本质上来说都是相同的。

  用二进制模式打开一个文件的时候,文件本身的内容和你编写程序时用函数读到的内容完全相同(或者说和磁盘上的内容完全相同)。

  但是如果用了文本模式,那么操作系统在将文件内容传给上层程序(库函数,或者是你的程序)时,或者上层程序通过操作系统向文件写入内容时,操作系统都会预先进行一层预处理(或者说转义),具体过程依赖于操作系统的实现。在Windows+VC下,最常见就是将回车符"\r\n"(没有引号,且\作转义符用,下同)解释成"\n"(读出时),将"\n"解释成"\r\n"(写入时)。而在Linux下没有这层转换,这也是Windows和Linux文本文件不通用的原因。

  除此以外,两种打开方式其实是大同小异的。
  举个例子,设有一文件file.dat内容为"ABC\r\nABC",那么在下面的代码中,读到的内容将是"ABC\r\nABC":
  fp = fopen("file.dat","rb"); 
  while(fgetc(fp)!=EOF);
  而在下面的代码中,读到的内容却是"ABC\nABC":
  fp = fopen("file.dat","rt"); 
  while(fgetc(fp)!=EOF);

  还有一点要注意的是关于文件定位的问题。在文本模式下最好少用fseek,因为有了库函数的那层转义的存在,fseek会有一些近乎于奇怪的行为。我在Windows+VC下试验发现,尽管在文本模式下"\r\n"还是被当作两个字符计算的,但是当你把文件指针定位到"\r\n"处时,读到的两个字节都是"\n"。

C的文本方读写与二进制读写的差别仅仅体现在回车换行符的处理上.文本方式写时,每遇到一个''\n''(0AH换行符),它将其换成''\r\n''(0D0AH,回车换行),然后再写入文件;当文本读取时,它每遇到一个''\r\n''将其反变化为''\n'',然后送到读缓冲区.正因为文本方式有''\n''--''\r\n''之间的转换,其存在转换耗时.二进制读写时,其不存在任何转换,直接将写缓冲区中数据写入文件.

参考资料:

http://loveli0917.blog.163.com/blog/static/13315265520113524336142/

http://topic.okbase.net/200611/2006112014/2778420.html

http://hi.baidu.com/%B2%C5%D3%C9%D0%C4%C9%FA/blog/item/eaa9f646fb64e532869473c2.html

文件读写: 二进制方式和文本方式的区别相关推荐

  1. java流与文件——读写二进制数据(DataOutput + DataInput)

    [0]README 0.1) 本文描述转自 core java volume 2, 旨在理解 java流与文件--读写二进制数据(DataOutput + DataInput)的相关知识: 0.2) ...

  2. Python实践:文件读写功能之txt文本

    Python:文件读写功能之txt文本 前奏 文件读 文件写 读写模式 完整demo 参考链接 文件读写中,最常用到的是txt文本文件读写功能,有C语言基础后,上手Python的文件读写就容易许多了. ...

  3. 用CSV文件读写数据的两种方式(转)

    导读:有时候我们需要对收集的数据做统计,并在页面提供显示以及下载.除了对传统的excel存取之外,对CSV文件的存取也很重要.本文列出了这两种操作的详细代码. 代码: <?php $file = ...

  4. c语言以只写方式打开二进制文件,C语言采用文本方式和二进制方式打开文件的区别分析...

    稍微了解C程序设计的人都知道,文本文件和二进制文件在计算机上面都是以0,1存储的,那么两者怎么还存在差别呢?对于编程人员来说,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制 ...

  5. 写文件函数 Linux C fwrite,C文件读写函数介绍(转)

    1.fopen() fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen实现三个功能:为使用而打开一个流,把一个文件和此 ...

  6. C++ builder 的文件读写操作总结

    C++ builder 的文件读写操作总结 在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是: 1.基于 ...

  7. [转]C/C++ 文件读写操作总结

    在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是: 1.基于C的文件操作: 2.基于C++的文件操作: ...

  8. C/C++ 文件读写操作总结

    C/C++ 文件读写操作总结 在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是: 1.基于C的文件操作: ...

  9. c++ 文件读写(转)

    C/C++ code //创建一个文本文件并写入信息 //同向屏幕上输出信息一样将信息输出至文件 #include<iomanip.h> #include<fstream.h> ...

  10. C/C++文件读写操作 —— windowsAPI

    转自:http://blog.sina.com.cn/s/blog_6e7fed390100z0j1.html 基于C的文件操作 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件 ...

最新文章

  1. C++类和对象的封装
  2. 分布式实时计算—Storm—基础介绍
  3. 高通量数据中批次效应的鉴定和处理(一)
  4. 汇编语言:实验10 根据材料编程—1.显示字符串
  5. Zookeeper的一次启动失败问题解决
  6. c语言嵌套结构体生日,第09天C语言(17):结构体嵌套
  7. 2013年1月第1个周末
  8. printf格式控制符的完整格式
  9. Unity Android汉化
  10. python身份证验证程序_python验证身份证信息实例代码
  11. 解决Mac App Store下载软件一直转圈无法完成的问题,黑白苹果均有效
  12. MD5介绍以及如何破解MD5算法
  13. idea快速创建包快捷键大全_idea快捷键大全
  14. Selenium - 元素等待与智能等待
  15. 副族元素从上到下原子半径_原子的大小以原子半径来表示
  16. excel单元格斜线_掌握Excel的这个制表技巧,“小白老师”也能变“超神”!
  17. SSM疫情防控志愿者管理系统 志愿者服务信息系统 大学志愿者管理系统Java
  18. 卡尔曼滤波系列——(四)无损卡尔曼滤波
  19. 【解决方案】笔记本电脑蓝牙耳机连接不稳定
  20. 自己对mysql中的Join的理解

热门文章

  1. (转)webstorm快捷键
  2. 蓝桥杯 振兴中华——2013年省赛C/C++ A组真题3
  3. webserver java_java实现简单webserver(分析+源码)
  4. sql 怎么查一个账号连续登录失败的次数_黑客到底是怎么入侵的,我展示给你看...
  5. lhdc协议是什么_无线耳机标注的编码是什么意思?看懂了会少很多坑
  6. mac安装linux 键盘不能用了,Parallels Desktop 9在Mac虚拟机安装Linux Ubuntu系统
  7. C# 操作mysql-创建表、插入更新数据
  8. 终于会用c#中的delegate(委托)和event(事件)了
  9. 打开SQlite数据库
  10. Python六大开源框架对比:Web2py略胜一筹(转)