什么是文件
磁盘上的文件是文件。
但是在程序设计中,一般注意这两个文件: 程序文件、数据文件
- 程序文件:
包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe) - 数据文件:
文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件
本文讨论的是数据文件 之前所处理的数据的输入输出都是以终端为对象的,即从终端的键盘输入数据,运行结果显示在显示器上。 但是有时候需要将信息输出到磁盘上进行保存,当需要的时候再从磁盘上把数据读取到内存中使用,这里处理的就是磁盘文件。
文件名
一个文件要有一个唯一的文件标识,以便用户识别和引用
文件名包含三部分:
例如:c:\code\test.txt
为了方便起见,文件标识常被称为文件名
文件类型
根据数据的组织形式不同,数据文件被分为文本文件和二进制文件。
二进制文件: 数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件
文本文件: 如果要求外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件
一个数据在内存中是怎么存储的呢?
字符一律以ASCII形式存储,数值型数据既可以用ASCII形式存储,也可以使用二进制形式存储。
如: 有整数10000,如果以ASCII码的形式输出到此怕,磁盘中占用5个字节(每个字符一个字节),而二进制形式输出,磁盘上只占4个字节。
代码测试:
void main()
{
int a = 10000;
FILE* fp1 = fopen("10000_ASCII.txt", "w");
fprintf(fp1, "%d", a);
FILE* fp2 = fopen("10000_BIN.txt", "wb");
fwrite(&a, 4, 1, fp2);
fclose(fp1);
fclose(fp2);
fp1 = NULL;
fp2 = NULL;
}
(10000的十六进制为00 00 27 10,小端存储)
VS中打开二进制文件: 右击 --> 打开方式 --> 二进制编码器
文件缓冲区
ANSIC标准采用缓冲文件系统处理数据文件。所谓缓冲文件系统是指系统自动的在内存中为程序中每一个正在使用的文件开辟一块文件缓冲区。
- 从内存向磁盘输出的数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。
- 如果从磁盘向计算机读入数据,则从磁盘文件中读取的数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个的将数据送到程序数据区(程序变量等)。
- -缓冲区的大小根据C编译系统决定的。
|