一、文件的理解
-
文件:文件是指驻留在外部介质(如磁盘等)中的一个有序数据集,可以是源文件、目标程序文件、可执行程序,也可以是待输入的原始数据,或是一组输出的结果。
-
文件分为文本文件和二进制文件:
(1) 文本文件:以字符ASCCII码值进行存储与编码的文件,其文件的内容就是字符 (2) 二进制文件:存储二进制数据的文件,没有进行任何转换
-
对文件的操作分为:输入()写操作 和 输出(读操作)
二、文件结构体与文件类型指针
-
文件结构体
(1) FILE 是c语言为了具体实现对文件的操作而定义的一个包含文件操作相关信息的结构类型,在头文件stdio.h中定义,具体如下: struct _iobuf { char *_ptr; int _cnt; char *_base; int _flag; int _file; int _charbuf; int _bufsiz; char *_tmpfname; }; typedef struct _iobuf FILE; (2) 以上结构 可以称为 FILE 类型
-
文件类型指针
(1) 指向FILE类型的指针称为文件类型指针,或是文件指针 (2) 语法:FILE *文件指针名; 例如:FILE *fp; FILE *fp1,*fp2,*fp3; // 同时定义多个文件指针
三、文件的相关操作
文件的访问过程一般遵循的顺序为:打开文件 -> 对文件内容进行读/写 ->关闭文件
-
打开文件:
(1) 函数:FILE*fopen(char *filename,char *mode) (2) 说明: a. 参数filename表示要打开的文件,可包含路径和文件名两部分 b. 参数mode表示文件的打开方式 (3) 功能:该函数将filename表示的文件按指定的mode方式打开,若打开成功,则返回被打开文件的文件指针;若打开失败,则返回NULL(NULL为空指针,在stdio.h中被定义为0) (4) 文件打开的方式: r:打开一个文本文件只读 w:打开一个文本文件只写 a:对一个文本文件添加 rb:打开一个二进制文件只读 wb:打开一个二进制文件只写 ab:对一个二进制文件添加 r+:打开一个文本文件读/写 w+:生成一个文本文件读/写 a+:打开一个文本文件读/写 rb+:打开二进制文件读/写 wb+:生成二进制文件读/写 ab+:打开二进制文件读/写 (5) 案例: FILE *fp; fp = fopen("F:\\a.txt","r+"); 注意:c语言的语法中,文件的路径需要使用 "\\" (6) 使用:通常应用判断文件是否成功打开 .... if(fp = fopen("F:\\a.txt","r+")==NULL){ // 打开文件 printf("文件打不开\n"); exit(0); } .... // 文件正常打开,则继续往下执行
-
关闭文件:
(1) 函数:int fclose(FILE *fp) (2) 说明:形参fp为文件指针 (3) 功能:该函数用于关闭fp所指向的文件,若文件能正常关闭则返回值为0,否则返回值为EOF(-1) (4) 案例:fclose(fp);
-
按照单个字符 读/写 文件(以ASCII字符为单位的文件顺序读/写)
(1) 单个字符读函数 a. 函数:int fgetc(FILE *fp) b. 参数:形参 fp为文件指针 c. 功能:该函数从指定文件的当前位置读取一个ASCII字符,并将文件位置指针器向后移动1个字节。若读取成功,则函数返回读取的字符,否则返回文件结尾的标志 EOF(-1) (2) 单个字符写函数 a. 函数:int fputc(char ch,FILE *fp) b. 参数:形参 ch为待写入文件的字符,形参fp为文件指针 c. 功能:该函数在指定文件的当前位置写入一个ASCII字符,并将文件位置指示器向后移动1个1字节,若写入成功,则函数返回写入的字符,否则返回EOF(-1)
-
案例:按照字符读写操作
#include <stdio.h> #include<stdlib.h> enum week{ Mon,Tue,Wed,Thu,Fri,Sat,Sun }; void main(){ FILE *fp; char ch; printf("%d\n",fgetc(fp)); if(fp=fopen("F:\\a.txt","r")==NULL){ printf("文件打不开\n"); exit(0); } fputc('h',fp); printf("文件内容为:"); int n =0; while(!feof(fp)) { ch = fgetc(fp); printf("%d\n",ch); n ++ ; if(n==5) break; } fclose(fp); }
-
按照字符串读/写函数
(1) 字符串读函数: a. 函数:char *fgets(char *str,int n,FILE *fp) b. 参数:形参str:指定从文件中读取到的字符串将要存入的地址,一般是个字符数组; 形参n:指定从文件中读取的字符个数,实际是读取n-1个,最后将读取的n-1个字符联通"\0"(字符 串结束标志)一起构成n个字符存放字符数组str中 形参fp:文件指针 c. 功能:函数执行成功,返回地址str,否则返回NULL d. 注意: i. 在读取n-1个字符前碰到了换行符 "\n",则读入提前结束,单换行符"\n"也会作为一个字符读入 ii. 在读取n-1个字符前碰到了文件结束符EOF,读入结束 以上两种情况都会在实际读取的字符后面加上字符"\0",作为最终读取的字符串返回 (2) 字符串写函数: a. 函数:int fputs(char *str,FILE *fp) b. 参数:形参str:指向带写入文件的字符串 形参fp:文件指针 c. 功能:函数将字符串str写入fp指向的文件中,但字符串末尾 "\0" 不写入;若写入成功,函数返回为 0,否则返回EOF。