C语言文件的操作
文件分类:文本文件、二进制文件
打开文件fopen(路径及文件名,打开模式)
如果打开成功则返回指向FILE结构的指针,否则返回null固定错误
由于系统换行符与C语言不同,所以要区分文本文件和二进制文件,只有Unix是与C语言一样的,不需要区分文件类型。
1.“r” 模式:
1.1 打开文件进行“只读”操作,即只能从文件读取内容。
1.2 若欲操作的文件不存在,则打开失败。
1.3 成功打开文件时,文件指针位于文件开头。
1.4 打开文件后,不会清空文件内原有内容。
1.5 可从文件中任意位置读取内容。
2."w" 模式:
2.1 打开文件进行“只写”操作,即只能向文件写入内容。
2.2 若欲操作的文件不存在,则新建文件。
2.3 成功打开文件时,文件指针位于文件开头。
2.4 打开文件后,会清空文件内原有的内容。
2.5 可向文件中任意位置写入内容,且进行写入操作时,会覆盖原有位置的内容。
3."a" 模式:
3.1 打开文件进行“追加”操作,即只能向文件写入内容。
3.2 若欲操作的文件不存在,则新建文件。
3.3 成功打开文件时,文件指针位于文件结尾。
3.4 打开文件后,不会清空文件内原有内容。
3.5 只能向文件末尾追加(写)内容。
4."r+"模式:
4.1 打开文件进行“读写”操作,即既可读取,又可写入。
4.2 若欲操作的文件不存在,则打开失败。
4.3 成功打开文件时,文件指针位于文件开头。
4.4 打开文件后,不会清空文件内原有内容。
4.5 无论是读取内容还是写入内容,都可在文件中任意位置进行,且进行写入操作时,会覆盖原有位置的内容。
5."w+"模式:
5.1 打开文件进行“读写”操作,即既可读取,又可写入。
5.2 若欲操作的文件不存在,则新建文件。
5.3 成功打开文件时,文件指针位于文件开头。
5.4 打开文件后,会清空文件内原有的内容。
5.5 无论是读取内容还是写入内容,都可在文件中任意位置进行,且进行写入操作时,会覆盖原有位置的内容。
6."a+"模式:
6.1 打开文件进行“读写”操作,即既可读取,又可写入。
6.2 若欲操作的文件不存在,则新建文件。
6.3 成功打开文件时,文件指针位于文件结尾。
6.4 打开文件后,不会清空文件内原有内容。
6.5 读取内容时,可以在任意位置进行,但写入内容时,只会追加在文件尾部。
关闭文件fclose(FILE*)
读写单个字符
1、读fgetc(FILE*)
读取到unsigned char返回int型,如果文件结束或者遇到错误返回EOF,fgetc()与getc()两个功能一致,区别是fgetc()是一个函数,getc()是宏的实现,宏快一点点,但是宏可能反复调用参数,不能使用有副作用的参数如fp++可能调用后变为fp++++++
2、写fputc(int c,FILE*)
c是待写入字符,成功返回写入的字符,发生错误则返回EOF,fputc()与putc()区别同1
读写整个字符串
1、fgets(char * s,int n,FILE*)
s是读取字符的存放地址,int 是读取数量n-1,留一个加\0,如果出错则不会覆盖s指向的字符串内容
2、fputs(char *s,FILE*)
参数同上
格式化读写文件
1、写入:fprint(FILE*,“%d%f…”,int ,float…)
2、读取:fscanf(FILE*,按照格式读,数据存放位置)
FILE* fp;
int a;
fscanf(fp,"%d",&a);//读出文件的一个数字存放到a中
二进制读写:
fread()与fwrite()他们都有四个参数,ptr是数据存放地址指针,第二个是读取内存块大小,第三是读取个数,最后一个是文件指针
FILE *fp;
struct book *tm=(struct book*)malloc(sizeof(struct book));
//初始化省略了
fwrite(tm,sizeof(struct book),1,fp);//把tm里的数据写到fp里
struct book *um=(struct book*)malloc(sizeof(struct book));
fread(um,sizeof(struct book),1,fp);//把fp里读到的数据存到um里
随机读写
ftell(FILE*),返回值通常为long int型,理解为文件是一个大数组,返回光标位置
rewind(FILE*),调用这个函数把光标移到文件首
移动光标函数fseek(FILE*,long int,whence):
FILE*fp;
fseek(fp,4,SEEK_SET);//把光标移到文件首后面四个字节
fseek(fp,4,SEEK_CUR);//把光标移到当前位置后面四个字节
fseek(fp,-4,SEEK_END);//把光标移到文件尾前面四个字节