C语言文件的操作详解
1.概述
- 文件的打开操作
1.打开一个文件 fopen
- 文件的关闭操作
1.关闭一个文件 fclose
- 文件的读写操作
1.从文件中读取一个字符 fgetc
2.写一个字符到文件中去 fputc
3.从文件中读取一个字符串 fgets
4.写一个字符串到文件中去 fputs
5.向文件中写格式化数据 fprintf
6.格式化读取文件中数据 fscanf
7.以二进制形式读取文件中的数据 fread
8.以二进制形式写数据到文件中去 fwrite
9.以二进制形式读取一个整数 getw
10.以二进制形式存储一个整数 putw
- 文件状态检查函数
1.文件结束 feof
2.文件读写出错 ferror
3.清除文件错误标志 clearerr
4.了解文件指针的当前位置 ftell
- 文件定位函数
1.反绕 rewind
2.随机定位 fseek
- 文件操作的访问模式
访问模式 | 含义 | 文件不存在时 | 文件存在时 |
---|
r | 以只读方式打开一个文本文件 | 错误 | 打开文件 |
w | 以只写方式打开一个文本文件 | 建立新文件 | 打开文件,并且清空原文件 |
a | 以追加方式打开一个文本文件 | 建立新文件 | 打开文件,只能从文件尾向文件追加数据 |
r+ | 以读/写方式打开一个文本文件 | 错误 | 打开文件 |
w+ | 以读/写方式打开一个文本文件 | 建立新文件 | 打开文件,并且清空原文件 |
a+ | 以读/写方式追加打开一个文本文件 | 建立新文件 | 打开文件,可从文件中读取或向文件中写入数据 |
rb | 以只读方式打开一个二进制文件 | 错误 | 打开文件 |
wb | 以只写方式打开一个二进制文件 | 建立新文件 | 打开文件,清空原文件 |
ab | 以追加方式打开一个二进制文件 | 建立新文件 | 打开文件,只能够从文件尾向文件追加数据 |
rb+ | 以读/写方式打开一个二进制文件 | 错误 | 打开文件 |
wb+ | 以读/写方式打开一个二进制文件 | 建立新文件 | 打开文件,清空原文件 |
ab+ | 以读/写方式追加打开一个二进制文件 | 建立新文件 | 打开文件,可从文件中读取或向文件中写入数据 |
2.文件的打开
FILE *fopen(char *pname, char *mode);
- 功能说明
按照mode给定的方式,去打开pname指定的文件,如果找不到文件,则会根据mode方式来进行处理! - 参数说明
1.pname
:一个字符指针,它指向要打开或者建立的文件名字的字符串
2.mode
:一个指向文件处理方式字符串的字符指针,具体方式详细见上表 - 返回值
1.正常返回:被打开文件的文件指针
2.异常返回:NULL,表示打开文件操作不成功 - 实例
FILE *fp = fopen("example.txt","r");//以只读形式打开文件example.txt
3.文件的关闭
int fclose(FILE *fp);
- 功能说明
关闭有fp文件指针所指向的文件。此时调用操作系统的文件关闭功能,关闭有fp文件指针所指向的文件,释放有关缓冲区。返回操作结果。 - 参数说明
1.fp
:一个已经打开文件的文件指针fp - 返回值
1.正常返回:0
2.异常返回:EOF(表示文件在关闭的时候发生错误) - 实例
fclose(fp);//关闭fp所指向的文件
4.文件的读写操作
— 从文件中读取一个字符 —
int fgetc(FILE *fp);
- 功能说明
从文件指针fp所指向文件中读取一个字符。 - 参数说明
1.fp
:一个已经打开文件的文件指针fp。 - 返回值
1.正常返回: 返回读取的字符代码
2.异常返回:返回EOF
— 写入一个字符到文件中去 —
int fputc(int ch,FILE *fp);
- 功能说明
把ch中的字符写入由文件指针fp所指向的文件中去。 - 参数说明
1.ch
:是一个整型变量,内存要写到文件中的字符(C语言中整型量和字符量可以通用)。
2.fp
:这是个文件指针,指向要在其中写入字符的文件。 - 返回值
1.正常返回: 返回读取的字符代码
2.异常返回:返回EOF
— 从文件中读取一个字符串 —
char *fgets(char *str,int n,FILE *fp);
- 功能说明
从由fp指向的文件中读取n-1个字符,并把它们存放到由str指出的字符数组中去,最后加上一个字符串结束符’\0’。 - 参数说明
1.str
:接收字符串的内存地址,可以是数组名,也可以是指针。
2.n
:要读取字符的个数
3.fp
:这是个文件指针,指向要在其中读取字符串的文件。 - 返回值
1.正常返回:返回字符串的内存首地址,即str的值
2.异常返回:返回一个NULL值
— 写一个字符串到文件中去 —
int fputs(char *str,FILE *fp);
- 功能说明
把由str指出的字符串写入到fp所指的文件中去。 - 参数说明
1.str
:指出要写到文件中去的字符串。
2.fp
:这是个文件指针,指向要写入字符串的文件。 - 返回值
1.正常返回:写入文件的字符个数,即字符串的长度
2.异常返回:返回一个NULL值
— 往文件中写入格式化数据 —
int fprintf(FILE *fp,char *format,arg_list);
- 功能说明
将变量表列(arg_list)中的数据,按照format指定的格式,写入由fp指定的文件。fprintf()函数与printf()函数的功能相同,只是printf()函数是将数据写入屏幕文件(stdout)。 - 参数说明
1.fp
:这是个文件指针,指出要将数据写入的文件。
2.format
:这是个指向字符串的字符指针,字符串中含有要写出数据的格式,所以该字符串成为格式串。格式串描述的规则与printf()函数中的格式串相同。
3.arg_list
:是要写入文件的变量列表,各变量之间使用逗号分隔。 - 返回值
1.正常返回:返回写入文件中的字符数
2.异常返回:EOF
— 从文件中格式化读取数据 —
int fscanf(FILE *fp,char *format,arg_list);
- 功能说明
从fp指向文件中读取数据,按照format指定的格式,写入变量列表之中。 - 参数说明
1.fp
:这是个文件指针,指出要读取数据的文件。
2.format
:这是个指向字符串的字符指针,字符串中含有要写出数据的格式,所以该字符串成为格式串。格式串描述的规则与printf()函数中的格式串相同。
3.arg_list
:是要从文件读取数据存储的变量列表,各变量之间使用逗号分隔。 - 返回值
1.正常返回:返回读取到文件中的字符数
2.异常返回:EOF
— 以二进制形式读取文件中的数据 —
int fread(void *buffer,unsigned sife,unsigned count,FILE *fp);
- 功能说明
从由fp指定的文件中,按二进制形式将sife*count个数据读到由buffer指出的数据区中 - 参数说明
1.buffer
:这是一个void型指针,指要将读入数据存放在其中的存储区首地址。
2.sife
:指一个数据块的字节数,即一个数据块的大小尺寸。
3.count
:指一次读入多少个数据块(sife)。
4.fp
:这是个文件指针,指要从其中读出数据的文件。 - 返回值
1.正常返回:实际读取数据块的个数,即count
2.异常返回:0
— 以二进制形式写数据到文件中去 —
int fwrite(void *buffer,unsigned sife,unsigned count,FILE *fp);
- 功能说明
从由fp指定的文件中,按二进制形式将sife*count个数据读到由buffer指出的数据区中 - 参数说明
1.buffer
:这是一个void型指针,指出要将其中数据输出到文件的缓冲区首地址。
2.sife
:指一个数据块的字节数,即一个数据块的大小尺寸。
3.count
:指一次输出多少个数据块(sife)
4.fp
:这是个文件指针,指要从其中写入数据的文件。 - 返回值
1.正常返回:实际读取数据块的个数,即count
2.异常返回:0
— 以二进制形式读取一个整数 —
int getw(FILE *fp);
- 功能说明
从由fp指定的文件中,以二进制形式读取一个整数 - 参数说明
1.fp
:这是个文件指针,指要从其中读取数据的文件。 - 返回值
1.正常返回:所读取整数的值
2.异常返回:EOF(因为读取出来的整数值可能是-1,所以需要使用foef()或ferror()来判断是否到了文件结束,亦或是文件出现错误)
— 以二进制形式写入一个整数 —
int putw(int n,FILE *fp);
- 功能说明
以二进制形式把由变量n指出的整数值存放到由fp指定的文件中。 - 参数说明
1.fp
:这是个文件指针,指要从其中写入数据的文件。 - 返回值
1.正常返回:所写入的整数值
2.异常返回:EOF
5.文件状态检查
—文件结束—
int feof(FILE *fp);
- 功能说明
判断文件是否结束。 - 参数说明
1.fp
:这是个文件指针。 - 返回值
1.0:假值,表示文件没有结束
2.1:真值,表示文件结束
—文件读/写出错—
int ferror(FILE *fp);
- 功能说明
检查由fp指定的文件在读写时是否出错。 - 参数说明
1.fp
:这是个文件指针。 - 返回值
1.0:假值,表示无错误
2.1:真值,表示出错
—清除文件错误标志—
void clearerr(FILE *fp);
- 功能说明
清除由fp指定文件的错误标志。 - 参数说明
1.fp
:这是个文件指针。 - 返回值
无
—了解文件指针当前位置—
long ftell(FILE *fp);
- 功能说明
取得由fp指定文件的当前读/写位置,该位置值用相对于文件开头的位移量来表示。 - 参数说明
1.fp
:这是个文件指针。 - 返回值
1.正常返回:位移量
2.异常返回:EOF
6.文件定位
—反绕—
void rewind(FILE *fp);
- 功能说明
使由文件指针fp指定的文件的位置指针重新指向文件的开头位置。 - 参数说明
1.fp
:这是个文件指针。 - 返回值
无
—随机定位—
int fseek(FILE *fp,long offset,int fromwhere);
- 功能说明
使文件指针fp移到基于fromwhere的相对位置offset处。 - 参数说明
1.fp
:这是个文件指针。
2.offset
:相对base的字节位移量。这是一个长整数。用来支持大于64KB文件
3.fromwhere
:这是表示开始添加偏移 offset 的位置。它一般指定为下列常量之一:
常量 | 描述 |
---|
SEEK_SET | 文件的开头 |
SEEK_CUR | 文件指针的当前位置 |
SEEK_END | 文件的末尾 |