在C语言中,操作文件之前必须先打开文件;
<stdio.h> 头文件中的 fopen() 函数即可打开文件,它的用法为:
FILE *fopen(char *filename, char *mode);
FILE 是 <stdio.h> 头文件中的一个结构体,它专门用来保存文件信息。
filename为文件名(或者文件路径),mode为打开方式,它们都是字符串。
怎样判断文件是否打开成功:
FILE *fp;if( (fp=fopen("data.txt","rb") == NULL ){printf("operation failed!\n");exit(0); //退出程序(结束程序)}
打开文件出错时,fopen() 将返回一个空指针,也就是 NULL,我们可以利用这一点来判断文件是否打开成功
最基本的文件打开方式
打开方式 | 说明 |
---|---|
r | 以“只读”方式打开文件。只允许读取,不允许写入。文件必须存在,否则打开失败。 |
w | 以“写入”方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容,再创建一个新文件。 |
a | 以“追加”方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么将写入的数据追加到文件的末尾。 |
r+ | 以“读写”方式打开文件。既可以读取也可以写入,也就是随意更新文件。文件必须存在,否则打开失败。 |
w+ | 以“写入/更新”方式打开文件,相当于w和r+叠加的效果。既可以读取也可以写入,也就是随意更新文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容, 再创建一个新文件。 |
a+ | 以“追加/更新”方式打开文件,相当于a和r+叠加的效果。既可以读取也可以写入,也就是随意更新文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么将写入的数据追加到文件的末尾。 |
----- | 以上六种为读写权限字符串(必须声明);下面两种为读写方式字符串(默认为“t”), |
b | 二进制文件。 |
t | 文本文件,如果不写,默认为"t"。 |
读写权限和读写方式组合使用的两种正确方式:
- 将读写方式放在读写权限的末尾,例如:“rb”
- 将读写方式放在读写权限的中间,例如:“rb+”
文件使用完毕应如何关闭
文件一旦使用完毕,应该用 fclose() 函数把文件关闭,以释放相关资源,避免数据丢失。
fclose(fp);
文件正常关闭时,fclose() 的返回值为0,如果返回非零值则表示有错误发生。
示例:
#include<stdio.h>#include<stdlib.h>int main() {//本段循环代码读取部分可省略不看,重点在打开与关闭 FILE *fp;char ch;int count=0;if((fp=fopen("data.txt","r"))==NULL) { printf("operation failed!\n");exit(0);}while((ch=fgetc(fp))!=EOF) { //循环读取文件的每一行数据if(ch=='#'||ch=='H'||ch=='T') { count++;} else if(ch=='@') { count+=2;}}printf("%d",count);fclose(fp); //关闭文件的正确方式return 0;}
小结:
- fopen:<stdio.h> 头文件中打开文件的函数。
- FILE: <stdio.h> 头文件中的一个结构体,它专门用来保存文件信息。
- fclose:<stdio.h> 头文件中关闭先前fopen()打开的文件的函数,此动作会让缓冲区内的数据写入文件中, 并释放系统所提供的文件资源。