什么是文本文件,什么是二进制文件?


               在Windows和DOS系统中,狭义的文本文件是指扩展名为txt的文件。

         实际上,那些没有格式的,由可理解的ASCII以及其他编码文字组成的文件都是文本文件,

         如C源文件,HTML超文本文件,XML。除此之外的其他文件都是二进制文件,如word文件DOC,图像格式文件JPG。

         但是就所谓使用fopen函数打开文本文件与二进制文件的说法并不准确,正确的说法应该:

         以文本方式和二进制方式打开文件。因为我们用两种方式都可以打开任意的文件。即使这样,为什么还要区分   两种方式呢?

         这是因为这两种方式在读写文件时的操作是不一样的。

         二进制方式很简单,读文件时,会原封不动的读出文件的全部内容,写的时候,也是把内

        存缓冲区的内容原封不动的写到文件中。而文本方式就不一样了,在读文件时,会将换行符CRLF(0x0D 0x0A)全部换成单个的0x0A,并且当遇到结束符CTRLZ(0x1A)时,就认为文件应经结束。相应的,写文件时,会将所有的0x0A换成0x0D 0x0A.


        所以,若使用文本方式打开二进制文件时,就很容易出现文件读不完整,或内容不对的错误,即使是用文本方式打开文本文件,也要慎重使用,比如复制文件,就不应该使用文本方式。要特别注意的是,上面这样的说法仅适应于DOS和Windows系统,在Unix和其他一些系统中,没有文本方式和二进制方式的区分,是不是用‘b’标志是一样的,这是由于不同的操作系统对文本文件换行符的定义,和C语言中换行符的定义有所不同造成的。

       当初C是在Unix上发展的,对于Unix的定义和C语言自然是一样的,其后在C被引入到DOS系统,为了使原有的C程序能不加修改的读写DOS文本文件,所以就在文件读写上做了修改。