关于 二进制 文件
是不是用 "wb "打开一个文件,向该文件写入的东西被保存成二进制文件的形式了呢?
谢谢啊
[解决办法]
在C言文件操作後,我都知道打文件的函是fopen,也知道它的第二是字符串。其中,如果字符串中出 'b ',表明是以打二制(binary)文件,否是打文本文件。
那甚是文本文件,甚是二制文件呢? 可能大多人都有仔考。
在Windows和DOS系中,的文本文件是指展名txt的文件。上,那些有定格式的,由可理解的的ASCII以及其他文字成的文件都是文本文件,如C源程序文件,HTML超文本,XML。除此之外的其他文件都是二制文件,如Word文件DOC,像格式文件JPG。
但是,所使用fopen打文本文件二制文件的法不。正的法是--以文本方式和二制方式打文件。因我用方式都可以任意的文件。
即使,甚要分方式呢?
是因方式在文件的操作是不一的。
二制方式很,文件,原封不的出文件的全部容,的候,也是把存的容原封不的到文件中。
而文本方式就不一了,在文件,行符CRLF(0x0D 0x0A)全部成的0x0A,且遇到束符CTRLZ(0x1A),就文件已束。相的,文件,所有的0x0A成0x0D0x0A。
所以,若使用文本方式打二制文件,就很容易出文件不完整,或容不的。即使是用文本方式打文本文件,也要慎使用,比如文件,就不使用文本方式。
要特注意的是,上面的法用于DOS和Windows系。在Unix和其他一些系中,有文本方式和二制方式的分,使不使用 'b '都是一的。是由于不同操作系文本文件行符的定,和C言中行符的定有所不同而造成的。
如上文已提到,DOS和Windows系使用CRLF(0x0D 0x0A)字作文本文件行符,而Unix文本文件的行符只有一字LF(0x0A)。在C言中,也是以LF即 '\n '行符。
由於DOS/Windows定的行符和C言的不一致,C言的入出函行文本文件,就行了CRLF-> LF的。而Unix的定和C言的是一的,就不必了。
那,甚有定不一致的情呢,史原因。初C是在Unix上展的,行的定自然就一了。其後C被引入到DOS系,了使原有的C程序能不加修改的DOS的文本文件,所以就在文件上做了修改。著DOS/Windows成主流平台,初了兼容而做的修改多的C言者添了一小小的麻。