1.需要掌握的一些知识点
文件有上千种,但在我们的编程中,一般会说两类文件:
1.程序文件
包括源程序文件(后缀:.c)、目标文件(环境后缀:.obj)、可执行程序(环境后缀:.exe)。
2.数据文件
文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行时需要从中读取数据的文件,或者输出内容的文件。
在本节中,我们主要参考数据文件。
1.文件名
我们知道名称是用来标识和区分事物的,所以文件名也是如此,文件名是区分每个文件的标识符。
文件名由3部分组成:文件路径+文件名主干+文件后缀
例如:C:\\\\etc.txt
其中:C:\\\\为文件路径,etc为文件名主干,txt为文件名后缀。
当然,文件路径因平台而异,为了方便起见,文件标识符通常称为文件名。
2.文件类型
根据数据的组织方式,数据文件称为文本文件或二进制文件。
二进制文件:数据以二进制形式存储在内存中,不经过转换就输出到外部存储器。
文本文件:需要以ASCII码的形式存储在外部存储器上,存储前需要进行转换,以ASCII字符的形式存储的文件。
那么一段数据在内存中是如何存储的呢?
字符始终以 ASCII 形式存储,数字数据可以以 ASCII 或二进制形式存储。
比如有一个整数10000,如果以ASCII码的形式输出到磁盘上,就会在磁盘上占用5个字节(每个字符一个字节)
二进制形式输出仅占用磁盘上的4个字节(测试)。
喜欢:
我们可以测试一下:
#
int main()
整数a=10000;
FILE* pf = fopen("test.txt", "wb");
(&a, 4, 1, pf);//以二进制形式写入文件
(pf);
pf = 空;
0;
我们打开的时候要注意用二进制编辑器打开。 你会发现出现了一串如下图所示的数字,这些数字都是用十六进制表示的。 转换后,正好是上图所示的一串二进制数。 (注意VS使用-存储模式)
3. 数据流向
数据流:
是指程序与数据的交互以流的形式进行,包括输入流和输出流;
输入流:
程序从输入流中读取数据源。 数据源包括键盘、文件、网络等,即将数据源读入程序的外部通道。
输出流:
程序将数据写入输出流。 将程序中的数据输出到外界(显示器、打印机、文件、网络等)的通信通道。
使用数据流的目的是让输入和输出独立于设备,无论数据源来自哪里,输出目的地是什么设备。
4. 文件缓冲区
缓冲:
指程序运行时提供的额外内存,可用于临时存储准备执行的数据。 可以大大提高创建、访问、删除静态数据的运行速度(有时速度提升可达几十倍),
它为我们提供了极大的便利,节省了大量的时间和精力。
文件缓冲区:
ANSIC 标准使用“缓冲文件系统”来处理数据文件。 所谓缓冲文件系统,是指系统自动在内存中为程序中正在使用的每个文件创建一个“文件缓冲区”。
从内存输出到磁盘的数据会先发送到内存中的缓冲区,等缓冲区填满后再一起发送到磁盘。 如果从磁盘读取数据到计算机,则从磁盘文件读取数据并输入到内存缓冲区(缓冲区被填满),
然后数据从缓冲区一一发送到程序数据区(程序变量等)。 缓冲区的大小由C编译系统决定。
喜欢:
无论是输入还是输出,都是先存入缓冲区,然后再进行输入输出。
5. 文件指针
在缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”。
每个使用过的文件在内存中开辟一个对应的文件信息区,用于存储文件相关信息(如文件名、文件状态和文件当前位置等)。
该信息存储在结构变量中。 结构体类型由系统声明并命名为FILE。
我们可以看一下VS 2019中FILE的声明:
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//
// 通过这个进行I/O
//
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
#
#
空白* ;
} 文件;
#万一
不同C编译器的FILE类型的内容并不完全相同,但也类似。
每当打开一个文件时,系统会根据文件的情况自动创建一个FILE结构的变量,并填充信息。 用户无需关心细节。