目录
文件操作的步骤:
流:
标准流:
文件指针:
文件信息区:
概念:
关系转化:
注意:
文件指针:
文件的打开和关闭:
打开方式:
打开成功:
读写的概念:
操作代码演示:
相对路径和绝对路径:
绝对路径:
相对路径:
举例:
文件操作的步骤:
- 打开文件
- 读/写文件
- 关闭文件
流:
因为要朝不同的外部设备输出数据,或者从不同的外部设备中获取数据,这当中获取和拿取的过程和操作都是不同的,所以诞生了一个统一的操作和概念——流。
例如:C语言程序可以通过流获取数据,也可以将数据输送到流中,至于后面传输到不同设备的操作,或者流从各种设备中拿取数据的操作都是由流负责,程序只负责将数据从流中拿走,或者输出数据到流中。
所以打开文件也相当于打开流
标准流:
那为什么我们从键盘输入数据,向屏幕上输出数据,并没有打开流呢?
那是因为C语言程序在启动的时候,默认打开了3个流:
- stdin- 标准输入流,在大多数的环境中从键盘输入,scanf函数就是从标准输入流中读取数据
- stdout- 标准输出流,大多数的环境中输出至显示器界面,printf函数就是将信息输出到标准输出流中
- stderr- 标准错误流,大多数环境中输出到显示器界面。
这是默认打开了这三个流,我们使用scanf、printf等函数就可以直接进行输入输出操作的。stdin、stdout、stderr 三个流的类型是: FILE*,通常称为文件指针。
C语言中,就是通过FILE* 的文件指针来维护流的各种操作的。
文件指针:
缓冲文件系统中,关键的概念是"文件类型指针”,简称“文件指针”。
文件系统:文件系统就是C盘D盘这种,就是操作系统中管理文件的系统。
文件信息区:
概念:
- 每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。
- 这些信息是保存在一个结构体变量中的。该结构体类型是由系统声明的,取名FILE.
关系转化:
文件信息区存放文件名字状态位置等等,而这些信息就是存放在一个结构体变量中,也就是说这个文件信息区就是一个结构体变量,或者说文件信息区是由一个FILE类型的结构体来描述的。
注意:
- 不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。
- 每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节。
文件指针:
FILE* pf;//⽂件指针变量
- 可以使pf指向某个⽂件的⽂件信息区(是⼀个结构体变 量)。
- 通过该⽂件信息区中的信息就能够访问该⽂件。也就是说,通过⽂件指针变量能够间接找到与 它关联的⽂件。
而且打开文件就会有文件信息区,文件信息区都会由一个文件指针维护,通过文件指针就可以操作这个文件。
文件的打开和关闭:
文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。
在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系。
ANSIC规定使用 fopen 函数来打开文件fclose 来关闭文件。
//打开文件
FILE * fopen ( const char * filename, const char * mode );
//关闭文件
int fclose ( FILE * stream );
打开方式:
打开成功:
读写的概念:
操作代码演示:
FILE*pf = fopen("test .txt","w");
注意当前的文件所在处是编译器安排的,如果要打开别的地方的文件则需要使用路径。
相对路径和绝对路径:
绝对路径:
fopen("C:\\Users \\zpeng\\Desktop\\test.txt","w ");
相对路径:
- . 表示路径,或者说是当前路径
- .. 表示上一级的路径
举例:
FILE* pf = fopen("./../../test.txt","w");
当前路径的位置下的上一级路径的上一级路径。
FILEx pf = fopen("./../../hehe/test .txt","w");
当前路径的位置下的上一级路径的上一级路径下的hehe文件下的test.txt文件
FILEx pf = fopen(".\\..\\..\\hehe\\test .txt","w");
两种写法一样.