1. 二进制模式和文本模式
文本模式 | 二进制模式 |
---|---|
C可以认识Ctrl+Z为文件结尾 | C只会把Ctrl+Z当做文件中的一个字符,真正的文件结尾在后面 |
MS-DOS用\r\n 组合表示换行符,C将\r\n 看作\n | 程序将看到这两个字符 |
此外,文件的第一个字符可能不是文件的第一个字符,所以用文本文件打开,ftell()可以返回正确的文件当前位置。而使用二进制方式打开,则可能得不到正确的结果。
2. 文本I/O和二进制I/O
如果将整数12345使用文本IO函数fprintf(fp, "%d", num)
输入到文件指针fp所指向的文件中,实质上是将字符1
,2
,3
,4
,5
输入到了文件中。占了5个字节。
而使用二进制IO函数fwrite(&num, siezof(num), 1, fp)
输入到文件指针fp所指向的文件中,则是将12345
的二进制形式输入到了文本中,占一个int
大小的字节。
文本模式的IO函数可以用在二进制视图下打开的文件(rb
、wb
等),二进制模式的IO函数也可以用在文本视图下打开的文件(r
、w
等)。但一般情况下还是在文本视图下使用文本IO,二进制模式下使用二进制IO。
大概是因为文本模式的目的是使得人类能够直接阅读文件中的内容,要支持一种编码(ASCII、UTF8)。而二进制是方便计算机读取数据,同时使文件更小。
参考
C Prim Plus 第五版
C语言文本方式和二进制方式打开文件区别