1.文件的概念


2.文件的打开与关闭
2.1.文件指针
定义:

工作原理
1.文件指针是文件操作的核心,所有文件读写函数都通过它定位文件位置并执行操作。
2.文件指针在文件打开时由 fopen()
函数返回,在文件关闭时失效。
2.2.文件的打开与关闭

filename
:文件路径(相对或绝对)。
mode
:打开模式(详见下表)。
NULL
,需处理错误。






3.文件的写入和读取
3.1.字符的输入输出函数
1.fgetc
(字符输入)
1.函数原型:int fgetc(FILE *stream);
功能:从输入流中读取单个字符。
参数:stream
为文件指针(如 stdin
或已打开的文件)。
返回值:
成功:返回读取的字符,转换成对应的ascll
失败或读到文件末尾:返回 EOF
示例:

2. fputc
(字符输出)
函数原型:int fputc(int char, FILE *stream);
功能:向输出流写入单个字符。
参数:
char:写入的字符
stream:文件指针
返回值:
成功:返回写入的字符
失败:返回EOF
示例:

3.2.文本行的输入输出函数
1.fgets
(文本行输入)
函数原型:char *fgets(char *str, int n, FILE *stream);
功能:从输入流读取一行文本(包括换行符 \n
),最多读取 n-1
个字符(其中要剩下一个位置,储存\0)
参数:
str:接受读取的文本行指针
n:一次性读取的个数
stream:读取的文件指针
返回值:
成功:返回 str
失败或读取的文件末尾:返回NULL
注意:
1.自动会再字符串末尾加上\0
2.行长度超过 n-1
,剩余字符会留在流中下次读取
示例:

2. fputs
(文本行输出)
函数原型:int fputs(const char *str, FILE *stream);
功能:向输出流写入字符串(不自动添加换行符)。
参数:
str:字符串指针
stream:文件指针
返回值:
成功:返回非负数
失败:返回EOF
示例:

3.3.格式化输入输出函数
1.fscanf
(格式化输入)
函数原型:int fscanf(FILE *stream, const char *format, ...);
功能:从输入流按格式读取数据。
参数:
format:格式字符串(如 "%d %s"
)。
可变参数:存储读取结果的变量地址。
返回值:
成功:返回成功匹配的参数数量。
失败或文件末尾:返回 EOF
。
示例:

2. fprintf
(格式化输出)
函数原型:int fprintf(FILE *stream, const char *format, ...);
功能:向输出流按格式写入数据。
参数:
format
:格式字符串(如 "Value: %d\n"
)。
可变参数:要写入的数据。
返回值:
成功:返回写入的字符数。
失败:返回负数
示例:
3.4.二进制输入输出
1.fread
(二进制输入)
函数原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:从文件流读取二进制数据块。
参数:
ptr:存储数据的缓冲区指针。
size:每个数据项的字节大小。
nmemb:要读取的数据项数量。
stream:文件指针(需以二进制模式打开,如 "rb"
)。
返回值:返回实际读取的数据项数量(可能小于 nmemb
)。
示例:

2.fwrite
(二进制输出)
函数原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:向文件流写入二进制数据块。
参数:
ptr
:要写入的数据指针。
size
:每个数据项的字节大小。
nmemb
:要写入的数据项数量。
返回值:返回实际写入的数据项数量。
示例:
3.5.函数比较
1. 输入函数对比:scanf
vs fscanf
vs sscanf

共同点:
1.均使用格式字符串指定输入类型(如 %d
, %s
, %f
等)。
2.返回值均为成功匹配的参数数量,失败或文件末尾返回 EOF
。
核心区别:
1.输入源不同:scanf
从键盘读取,fscanf
从文件读取,sscanf
从字符串读取。
场景:
scanf
:交互式输入(如用户输入)
fscanf
:文件数据解析(如配置文件)
sscanf
:字符串解析(如解析网络协议或文本数据)
代码示例:
2. 输出函数对比:printf
vs fprintf
vs sprintf


共同点:
1.均使用格式字符串指定输出格式。
2.返回值均为写入的字符数(不包括结尾的 \0
),错误时返回负数。
核心区别:
2.输出目标不同:printf
输出到屏幕,fprintf
输出到文件,sprintf
输出到字符串。
场景:
scanf
:交互式输入(如用户输入)
fscanf
:文件数据解析(如配置文件)
sscanf
:字符串解析(如解析网络协议或文本数据
代码示例:

4.文件的随机读写








5.frof的使用
功能:feof(FILE *stream)
用于检测文件指针是否已到达文件末尾
返回值:
到达文件末尾返回非0值(true)
未到达文件末尾返回0(false)
错误的使用场景:
此时可能会导致多执行一次循环

6.文件缓冲区
