文件指针及文件操作函数


文章目录

  • 文件指针
    • 文件信息区
  • FILE* fopen(const char “文件名”,"操作字母")
  • 操作字母
    • 操作字母加+
    • 操作字母加b
  • int fclose(FILE*p)
  • int fputc(const char p1[要写入的字符],FILE*p2[指向存储该文件的文件信息区的FILE变量的 指针])
  • int fgetc(FILE*p)
  • int fputs(const char* p1[要写入的字符串的首地址],FILE*p2[指向存储该文件的文件信息区的FILE变量的 指针])
  • char* fgets(char* str,int num,FILE *p)
  • int fprintf(FILE*p,格式控制字符,输出项)
  • fscanf(FILE*p,“格式控制字符”,读取项)
  • unsignd int fwrite(const void*str,unsined int size ,unsined int count,FILE *p)
  • unsignd int fread(const void*str,unsined int size ,unsined int count,FILE *p)
  • int fseek(FILE*p,long 偏移量,自定起始位置)
  • long int ftell(FILE*p)
  • void rewind(FILE*p)
  • 文件读取结束的判定
    • 文件缓冲区
  • fflush(FILE*p)

文件指针

文件信息区

每个被使用的文件都在内存中开辟了一个相应的文件信息区,
用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。
该文件信息区中的数据由系统自动填充,使用者不必关心其细节
这些信息是保存在一个结构体变量中的。
而该结构体变量的类型和名称都是由系统声明的,并且都为FILE

操作文件一般都是通过一 个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。

FILE* pf;//文件指针变量

定义pf是-个指向FILE类型数据的指针变量。
可以使pf指向某个文件的文件信息区(是- 个结构体变量) .通过该文件信息区中的信息就能够访问该文件。
也就是说,通过文件指针变量能够找到与它关联的文件。

一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一

FILE* fopen(const char “文件名”,“操作字母”)

  • 操作任何文件之前都要向打开文件

打开文件函数

打开失败返回NULL

打开成功返回指向存储该文件的文件信息区的FILE变量的 指针

文件名之前可以加上该文件的绝对路径

要注意\要有两个才是单纯的\字符,不然是转义字符。
例:

FILE* pf = fopen("D:\\2024.1\\1.19\\1.19", "r");

一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一

操作字母

r:读取文件(用该方式打开文件时:如果打开的文件不存在,就无法打开文件

w:编写文件(用该方式打开文件时:如果打开的文件不存在,就创建一个新文件

如果打开的文件存在且该文件中有内容,内容会被清空

a:追加文件(用该方式打开文件时:如果打开的文件不存在,就创建一个新文件

如果打开的文件存在且该文件中有内容,内容不会被清空,但只能在该文件之前有的数据之后修改/增加数据,不能改变以该方式打开文件之前的该文件已有的数据

一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一

操作字母加+

  • r+:表示既可以读又可以写
  • w+:表示既可以读又可以写
  • a+:表示既可以读又可以写

操作字母加b

表示读写二进制内容

一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一

int fclose(FILE*p)

  • 使用完文件后都要关闭文件

关闭文件函数

关闭成功返回0,失败返回EOF

一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一

int fputc(const char p1[要写入的字符],FILE*p2[指向存储该文件的文件信息区的FILE变量的 指针])

字符写入函数

  • 功能:写入一个字符

写入成功返回写入的ASCII码值,失败返回EOF
例:
文件指针及文件操作函数_第1张图片

一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一

int fgetc(FILE*p)

读取一个字符

读取成功返回读取到的字符的ASCII码值

读取失败返回EOF

每次使用fgetc函数文件读取指针会自动向后走一个字节。


文件指针及文件操作函数_第2张图片

文件中有abcdef

如果使用3次fgetc函数,就会读取出abc

而不是aaa

一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一

int fputs(const char* p1[要写入的字符串的首地址],FILE*p2[指向存储该文件的文件信息区的FILE变量的 指针])

字符串写入函数

写入成功返回所写的最后一个字符

失败返回EOF

例:
文件指针及文件操作函数_第3张图片
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一

char* fgets(char* str,int num,FILE *p)

字符串读取函数

读取成功返回 第一个参数str

读取失败返回 NULL

str为读取的字符串存储的位置的首地址

num为最多读取的字符个数+1(因为它读取的时候会自动读取一个\0)

若在读到num—1个字符之前遇到换行符/文件结束标志EOF,则停止读取,系统自动添加\0,若有换行符则将换行符保留(换行符在\0之前),EOF不保留


文件指针及文件操作函数_第4张图片
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一

int fprintf(FILE*p,格式控制字符,输出项)

格式写入文件函数
使用方式除了多了一个FILE的指针参数以外与printf没什么区别

写入成功返回写入的数据的个数,失败返回负数

文件指针及文件操作函数_第5张图片

一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一

fscanf(FILE*p,“格式控制字符”,读取项)

格式读取文件函数(使用方式除了多了一个FILE的指针参数以外与scanf没什么区别)


文件指针及文件操作函数_第6张图片

一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一

unsignd int fwrite(const void*str,unsined int size ,unsined int count,FILE *p)

二进制写入文件函数

str为要写入数据的首地址。

size为要写入的单个数据的字节

count为要写入数据的个数。

p指向要被写入的文件


文件指针及文件操作函数_第7张图片

一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一

unsignd int fread(const void*str,unsined int size ,unsined int count,FILE *p)

二进制读取文件函数

读取成功返回读取成功的数据的个数

str为读取数据放入位置的首地址。

size为要读取的单个数据的字节

count为要读取数据的个数。

p指向要被读取的文件

一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一

int fseek(FILE*p,long 偏移量,自定起始位置)

定位文件读写指针,将文件读写指针重新定位,只定不读

设置成功返回0,失败返回-1

起始位置分三种

SEEK_SET又或者0 文件最开头[第一个字符]

SEEK_CUR又或者1 文件指针当前所处位置

SEEK_END又或者2 文件最末尾[指向文件最后一个字符的后一个字节]

偏移量是以文件指针所指位置为0,左减右加

一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一

long int ftell(FILE*p)

返回当前文件读写指针相对于文件的起始位置的偏移量,失败返回-1

[这里的起始位置只指文件最开头。]

一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一

void rewind(FILE*p)

让当前文件读写指针返回到文件的起始位置

[这里的起始位置只指文件最开始]

一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一

文件读取结束的判定

牢记:在文件读取过程中,不能用feof(FILE*p)函数的返回值直接用来判断文件的是否结束

因为feof是应用于当文件读取结束的时候,

判断是否是因为遇到文件尾结束。

如果是返回值就为真。

1.文本文件读取是否结束,判断返回值是否为EOF ( fgetc),或者NULL ( fgets )

如果是就读取结束了

2.二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。

如果小于就读取结束了

ferror(FILE*p)
判断读取的时候是否遇到了错误,如果返回值为真,就说明是遇到错误而结束读取

一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一

文件缓冲区

ANSIC标准采用缓冲文件系统处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块”文件缓冲区"。

从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐 个地将数据送到程序数据区(程序变量等) .

缓冲区的大小根据C编译系统决定的。

一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一

fflush(FILE*p)

刷新p指向的文件的缓冲区

并将缓冲区的数据进行处理(读取/写入)

fclose(FILE*p)关闭文件时也会刷新p指向的文件的缓冲区

并将缓冲区的数据进行处理(读取/写入)

你可能感兴趣的:(c语言)