当前位置:网站首页>C语言文件的操作
C语言文件的操作
2022-07-17 05:08:00 【学会放下ta】
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);//把光标移到文件尾前面四个字节
注意:以上对文件的每一次操作之前都要先打开文件再关闭文件(我省略了),防止数据读写出错
边栏推荐
- 操作系统常见面试题
- Leetcode53. maximum subarray and
- What are the B domain, m domain and O domain
- MySQL安装配置教程(超级详细)
- Solve the problem of inconsistent prediction effect between text detection training model and information model based on paddleocr
- Swagger configuration and use
- BUUCTF web WarmUp
- 使用Flink SQL传输市场数据1:传输VWAP
- ambari集群扩容节点+扩容服务操作
- Talk about 20 negative teaching materials for writing code
猜你喜欢

Questions d'entrevue courantes du système d'exploitation

Buuctf miscellaneous - QR code

Is the software testing training of lemon class reliable? This successful case of counter attack from the training class tells you

ambari集群扩容节点+扩容服务操作

分布式注册中心-etcd

聊聊写代码的20个反面教材

MapBox 加载本地离线地形

线上软件测试培训机构柠檬班与iTest.AI平台达成战略合作

Performance bottleneck finding - Flame graph analysis

The first smart contract program faucet sol
随机推荐
Online software testing training institutions lemon class and itest AI platform achieves strategic cooperation
聊聊redis分布式锁的8大坑
Teach you to reproduce log4j2 nuclear weapon level vulnerability hand in hand
Continue from the previous issue: the remaining two methods of the rotation chart
网络命令:网卡信息,netstat,arp
MySQL安装配置教程(超级详细)
Cesium geojson数据的添加与移除
ES6 latest commonly used knowledge dictionary (which can help you solve interview questions, problems in programming, etc.)
Performance bottleneck finding - Flame graph analysis
ECS deployment web project
From 20s to 500ms, I used these three methods
聊聊写代码的20个反面教材
Redis source code analysis 2 iterator
SQL injection
User mode protocol stack - UDP implementation based on netmap
10问10答:你真的了解线程池吗?
vlookup函数的使用方法及实例
mysql 缓存策略和解决方案
redis 源码分析 跳表实现
分布式存储-fastdfs