每个被使用的文件都在内存中开辟了一个相应的文件信息区,
用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。
该文件信息区中的数据由系统自动填充,使用者不必关心其细节
这些信息是保存在一个结构体变量中的。
而该结构体变量的类型和名称都是由系统声明的,并且都为FILE
操作文件一般都是通过一 个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。
例
FILE* pf;//文件指针变量
定义pf是-个指向FILE类型数据的指针变量。
可以使pf指向某个文件的文件信息区(是- 个结构体变量) .通过该文件信息区中的信息就能够访问该文件。
也就是说,通过文件指针变量能够找到与它关联的文件。
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
打开文件函数
打开失败返回NULL
打开成功返回指向存储该文件的文件信息区的FILE变量的 指针
文件名之前可以加上该文件的绝对路径
要注意\要有两个才是单纯的\字符,不然是转义字符。
例:
FILE* pf = fopen("D:\\2024.1\\1.19\\1.19", "r");
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
r:读取文件(用该方式打开文件时:如果打开的文件不存在,就无法打开文件)
w:编写文件(用该方式打开文件时:如果打开的文件不存在,就创建一个新文件
如果打开的文件存在且该文件中有内容,内容会被清空)
a:追加文件(用该方式打开文件时:如果打开的文件不存在,就创建一个新文件
如果打开的文件存在且该文件中有内容,内容不会被清空,但只能在该文件之前有的数据之后修改/增加数据,不能改变以该方式打开文件之前的该文件已有的数据)
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
表示读写二进制内容
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
关闭文件函数
关闭成功返回0,失败返回EOF
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
字符写入函数
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
读取一个字符
读取成功返回读取到的字符的ASCII码值
读取失败返回EOF
每次使用fgetc函数文件读取指针会自动向后走一个字节。
文件中有abcdef
如果使用3次fgetc函数,就会读取出abc
而不是aaa
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
字符串写入函数
写入成功返回所写的最后一个字符
失败返回EOF
例:
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
字符串读取函数
读取成功返回 第一个参数str
读取失败返回 NULL
str为读取的字符串存储的位置的首地址
num为最多读取的字符个数+1(因为它读取的时候会自动读取一个\0)
若在读到num—1个字符之前遇到换行符/文件结束标志EOF,则停止读取,系统自动添加\0,若有换行符则将换行符保留(换行符在\0之前),EOF不保留
例
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
格式写入文件函数
(使用方式除了多了一个FILE的指针参数以外与printf没什么区别)
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
格式读取文件函数(使用方式除了多了一个FILE的指针参数以外与scanf没什么区别)
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
二进制写入文件函数
str为要写入数据的首地址。
size为要写入的单个数据的字节
count为要写入数据的个数。
p指向要被写入的文件
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
二进制读取文件函数
读取成功返回读取成功的数据的个数
str为读取数据放入位置的首地址。
size为要读取的单个数据的字节
count为要读取数据的个数。
p指向要被读取的文件
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
定位文件读写指针,将文件读写指针重新定位,只定不读
设置成功返回0,失败返回-1
起始位置分三种
SEEK_SET又或者0 文件最开头[第一个字符]
SEEK_CUR又或者1 文件指针当前所处位置
SEEK_END又或者2 文件最末尾[指向文件最后一个字符的后一个字节]
偏移量是以文件指针所指位置为0,左减右加
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
返回当前文件读写指针相对于文件的起始位置的偏移量,失败返回-1
[这里的起始位置只指文件最开头。]
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
让当前文件读写指针返回到文件的起始位置
[这里的起始位置只指文件最开始]
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
牢记:在文件读取过程中,不能用feof(FILE*p)函数的返回值直接用来判断文件的是否结束
因为feof是应用于当文件读取结束的时候,
判断是否是因为遇到文件尾结束。
如果是返回值就为真。
1.文本文件读取是否结束,判断返回值是否为EOF ( fgetc),或者NULL ( fgets )
如果是就读取结束了
2.二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。
如果小于就读取结束了
ferror(FILE*p)
判断读取的时候是否遇到了错误,如果返回值为真,就说明是遇到错误而结束读取
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
ANSIC标准采用缓冲文件系统处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块”文件缓冲区"。
从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐 个地将数据送到程序数据区(程序变量等) .
缓冲区的大小根据C编译系统决定的。
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
刷新p指向的文件的缓冲区
并将缓冲区的数据进行处理(读取/写入)
fclose(FILE*p)关闭文件时也会刷新p指向的文件的缓冲区
并将缓冲区的数据进行处理(读取/写入)