首页 > 代码库 > 文本文件与二进制文件

文本文件与二进制文件

这里谈谈文本文件与二进制文件以及C语言读写这两种文件的标准接口。

具体到物理保存时都是二进制的,关键是保存前对数据的编码有区别。


文本文件与二进制文件在计算机文件系统中的物理存储都是二进制的,也就是在物理存储方面没有区别都是01码,这个没有异议,他们的区别主要在逻辑存储上,也就是编码上。

文本文件格式存储时是将值作为字符然后存入其字符编码的二进制,文本文件用‘字符’作为单位来表示和存储数据,比如对于1这个值,文本文件会将其看做字符‘1’然后保存其ASCII编码值(这里假定是ASCII编码),这样在物理上就是0x31这个二进制值,而若是二进制保存1,则直接保存其二进制值,比如如果程序中是处理1为整数则保存的二进制值就是 0x00000001 (4字节)。


当然如果程序本来就是按字符保存的 也就是 char ch =‘1‘ ; 则二进制保存后值就是其ASCII码,因为该变量的二进制本来就是其ASCII码。可以总结出二进制文件就是值本身的编码,那么就是不定长的编码了,因为值本身就是不等字节的,如整数4个字节那么保存在二进制文件就是这四个字节的原生二进制值。

综上,可以知道文本文件与二进制文件就是编码方式不一样而已,而这个是用户行为,把一个数据以什么样的编码(字符还是值本身)存入文件是由用户主动选择的,也就是写入的接口选择,如果以二进制接口方式写入文件那么就是一个二进制文件,如果以字符方式写入文件就是一个文本文件了。既然有写入时候的编码也就会有读出的编码,只有两个编码对应才能读出正确的结果,如用记事本打开一个二进制文件会呈现乱码的,这里稍微提一下后缀名,后缀名并不能确定其是否就是文本文件,二进制文件也可以是txt后缀名,后缀名只是用来关联打开程序,给用户做备注用的,与文件的具体编码没有关系。

可以使用字符接口读写二进制文件,只需要做些处理即可,所以所谓的二进制文件,文本文件主要体现在读写方式这里。
此外windows有一个明显的区别是对待文本文件读写的时候,会将换行 \n自动替换成 \r\n。

最后文本文件和二进制文件主要是windows下的概念,UNIX/Linux并没有区分这两种文件,他们对所有文件一视同仁,将所有文件都看成二进制文件。

标准I/O库中 主要使用 fread/fwrite来读写二进制文件,而对于文本文件可以使用 fread/fwrite fgetc/fputc fprintf等等。

文本文件与二进制文件