文本文件和二进制文件:
数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是
二进制文件
。
如果要求在外存上以
ASCII
码的形式存储,则需要在存储前转换。以
ASCII
字符的形式存储的文件就是
文
本文件
。
一个数据在内存中是怎么存储的呢?
字符一律以
ASCII
形式存储,数值型数据既可以用
ASCII
形式存储,也可以使用二进制形式存储。
如有整数
10000
,如果以
ASCII
码的形式输出到磁盘,则磁盘中占用
5
个字节(每个字符一个字节),而
二进制形式输出,则在磁盘上只占
4
个字节(
VS2013
测试)。
二进制文件打开方式:
文件读取结束的判定:
被错误使用的
feof
牢记:在文件读取过程中,不能用
feof
函数的返回值直接用来判断文件的是否结束。
而是
应用于当文件读取结束的时候,判断是读取失败结束,还是遇到文件尾结束
。
1.
文本文件读取是否结束,判断返回值是否为
EOF
(
fgetc
),或者
NULL
(
fgets
)
例如:
fgetc
判断是否为
EOF (-1)
fgets
判断返回值是否为
NULL (0)
.
ferror —— 在文件读取结束后用来判断文件在读取过程中是否发生错误结束
feof —— 在文件读取结束后用来判断文件在读取过程中是否遇到结束标志而结束
2.
二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。
例如:
fread
判断返回值是否小于实际要读的个数。
fread要求读取count个大小位size个字节的数据
如果读取到count个数据,函数返回count
如果没有读取到count个数据,返回真实读取到的完整的数据个数
文件缓冲区:
ANSIC
标准采用
“
缓冲文件系统
”
处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序
中每一个正在使用的文件开辟一块
“
文件缓冲区
”
。从内存向磁盘输出数据会先送到内存中的缓冲区,装
满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓
冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区的大小根
据
C
编译系统决定的。