文本文件和二进制文件的区别

首先,任一文件本身并没有严格意义上的文本文件或二进制文件的区别 —— 一个文件既可以文本方式打开,也可以以二进制方式打开,而所谓文本文件和二进制文件是打开方式上的区别。但在实际使用中,一般将采用ASCII码及其他可理解字符集存储的文件被称为文本文件,且通常以文本方式打开,如平文本文件(*.txt),C源程序文件,HTML超文本,XML等;除此之外的其他文件都称为二进制文件,如Word文件DOC,图象格式文件JPG。

其次,文本文件和二进制文件的区别只是对DOS和Windows系统来说的,对Unix及其他操作系统并没有这种区分(它们统一都是二进制文件)。

那么,为什么还要区分两种方式呢? 这是因为这两种方式在读写文件时的操作是不一样的。   

二进制方式很简单,读文件时,会原封不动的读出文件的全部內容,写的時候,也是把內存缓冲区的內容原封不动的写到文件中。   

而文本方式就不一样了,在读文件时,会将回车换行符“\r\n”(0x0D 0x0A)全部转换成换行符“\n”(0x0A),并且当遇到结束符CTRLZ(0x1A)时,就认为文件已经结束。相应的,写文件时,会将所有的“\n”(0x0A)换成“\r\n”(0x0D 0x0A)。 所以,若使用文本方式打开二进制文件时,就很容易出现文件读不完整,或內容不对的错误。即使是用文本方式打开文本文件,也要谨慎使用,比如复制文件,就不应该使用文本方式。   

如上文已提到,DOS和Windows系统使用CRLF(0x0D 0x0A)双字节作为文本文件换行符,而Unix文本文件的换行符只有一个字节LF(0x0A)为。在C语言中,也是以LF即'\n'为换行符。   

由于DOS/Windows定义的换行符和C语言的不一致,C语言的标准输入输出函数适行读写文本文件时,就适行了CRLF->LF的转换。而Unix的定义和C语言的是一样的,就不必转换了。   

参考:http://hi.baidu.com/hyredsnow/blog/item/aa236a3af8999cd2d562258

原文地址:https://www.cnblogs.com/jancco/p/2488992.html