C语言文件的操作

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);//把光标移到文件尾前面四个字节

注意:以上对文件的每一次操作之前都要先打开文件再关闭文件(我省略了),防止数据读写出错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值