文件读写: 二进制方式和文本方式的区别
2013-05-02 21:32
295 查看
首先要明白一点,就是无论你用哪种语言进行程序设计,也无论你用哪个函数进行文件操作(库函数也好,直接操作系统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"。
转载自:http://loveli0917.blog.163.com/blog/static/13315265520113524336142/
用二进制模式打开一个文件的时候,文件本身的内容和你编写程序时用函数读到的内容完全相同(或者说和磁盘上的内容完全相同)。
但是如果用了文本模式,那么操作系统在将文件内容传给上层程序(库函数,或者是你的程序)时,或者上层程序通过操作系统向文件写入内容时,操作系统都会预先进行一层预处理(或者说转义),具体过程依赖于操作系统的实现。在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"。
转载自:http://loveli0917.blog.163.com/blog/static/13315265520113524336142/
相关文章推荐
- 文件读写:fwrite与fprintf的区别(即二进制方式和文本方式的区别)
- 文件读写:fwrite与fprintf的区别(即二进制方式和文本方式的区别)
- 文件读写:fwrite与fprintf的区别(即二进制方式和文本方式的区别)
- 文件读写: 二进制方式和文本方式的区别
- 文件读写:fwrite与fprintf的区别(即二进制方式和文本方式的区别)
- 文件读写: 二进制方式和文本方式的区别
- 文件读写的文本方式与二进制方式、文本文件与二进制文件之区别
- 文件读写: 二进制方式和文本方式的区别
- 文件读写: 二进制方式和文本方式的区别
- 文件读写: 二进制方式和文本方式的区别
- 文本与二进制方式打开文件的区别
- C语言采用文本方式和二进制方式打开文件的区别分析
- 文本方式读写文件和以二进制方式
- C语言文本方式和二进制方式打开文件区别
- 文本与二进制方式打开文件的区别
- 文本与二进制方式打开文件的区别
- C语言文本方式和二进制方式打开文件区别
- C语言文本方式和二进制方式打开文件区别
- 二进制和文本方式打开文件的区别
- 文本与二进制方式打开文件的区别