所有的信息在内存中都是以二进制的形式进行存储的,这说明了二进制文件和文本文件不是在硬件上进行区分的。
二进制和文本文件因为操作系统的不同而不同,毕竟不同的人实现同一问题的思路也不是完全一样的嘛,首先说一下比较简单的那个:在Linux环境中,二进制文件和文本文件不进行区分。也就是说这两种方式在Linux操作系统下的实现机制是一样的;在OS X下面,太高大上了,用不到,所以也不关心;在Windows下面,二进制和文本文件是有区别的,下面就主要说明一下两者在Windows环境下的区别以及对应的文件操作函数。
首先来说明一下:文件是什么?文件的本质其实也就是一段存储空间,不过这段空间是位于磁盘上的。程序中使用文件的主要目的就是为了在程序结束后程序中的一些数据依旧能够得到保存以便下次使用或者直接查阅。
我主要将Windows环境下二进制文件和文本文件的区别归为以下几方面:
1、在Windows环境下,每一行结束的结束符是回车符和换行符的组合\r\n。C语言中是以\n作为换行符的。如果C程序是通过文本文件来处理的,那么它会很聪明地在这里做一个自动转换。在写入文本的时候,它会将\n转换为\r\n,在从文本读出来的时候,它会对应的将\r\n转换为\n。不得不吐槽一下,这个做法相对Linux来说很不好。
2、对应的处理函数不同
选择使用二进制文件还是使用文本文件需要在fopen()函数中的第二个参数打开模式进行选择。其中多一个字母b的为二进制文件,没有的对应为文本文件。
2.1、文本文件操作函数
1)写入文本文件
int fputc(int c,FILE* pfile);
2)读取文本文件
mchar = fgetc(pfile);
3)将字符串写入文本文件
int fputs(char *pstr, FILE* pfile);//这个函数以‘\0‘为结束符,‘\0‘并不会被写入文件
4)从文本文件读取字符串
char *fgets(char *pstr, int nchars, FILE* pfile);//读到‘\0‘或者长度为nchars-1结束
上面这两组函数主要用来将字符或字符串读/写入文本文件。当需要处理其他的数据类型时往往使用下面两个函数:
格式化输入、输出
5)格式化文件输出
fprintf(pfile,"%...",XXX,XXX,XXX);//用法和printf一样
6)格式化文件输入
fscanf(pfile,"%...",XXX,XXX,XXX);//用法和scanf对stdin的操作一样
格式化输入输出的缺点:精度不够,会造成浮点型变量精度丢失。
以上三组IO操作都是文本文件操作。下面开始介绍二进制文件操作。
二进制文件的优点有以下几点:
1)没有数据转换,所以也就不存在精度丢失
2)二进制文件的读写速度相比较于文本文件要快一点,因为文本文件需要做一些格式的改变。
2.2、二进制文件读写函数:
1)读函数
fread
2)写函数
fwrite
总结:
我只能说,要尽量使用二进制读写函数来操作二进制文件,使用文本文件读写函数来操作文本文件,但这并不是强制的,你混用了编译器也不会报错,但是估计有时候结果并不是你想要得到的结果。
如果写入的是文本文件,那么就请在读取时也使用文本文件,二进制文件也是一样,混用的话会导致一些很奇葩的问题。
二进制文件和文本文件其实就是在文件的控制方面有一点不一样,这对于使用者来说其实都不会是太大的影响,关键是你要正确使用二进制文件和文本文件对应的IO操作函数。不要太过于纠结到底要使用哪个,因为它们两个在系统中都有实现。
注:不足之处希望可以指出,谢谢
版权声明:本文为博主原创文章,未经博主允许不得转载。