[文件操作]

想要持久化的保存程序就需要使用文件,而文件一般分为两种
程序文件 与 数据文件

程序文件: 可执行程序
即程序运行需要从中读取数据的文件或输出内容的文件
数据文件: 数据库的文件

文件名的命名方式:

文件路径+文件名主干+文件后缀

文本文件与二进制文的区分:

以ascll码的形式存储的文件就是文本文件
存储时直接以二进制方式直接存储就是二进制文件

文件的打开与关闭

流 : c程序针对文件画面键盘的数据都是通过流来操作的
一般我们想要向流里写数据,读取数据需要打开流
标准流:
stdin stdout stderr三个都是FILE*类型的文件指针

打开文件:
FILE* pf=fopen(const char* filename, const char* mode )
r(只读) 为了输入数据 打开一个已经存在的文本文件 指定文件不存在时出错

w(只写) 为了输出数据, 打开一个文本文件(会将原本存在的内容清空) 指定文件不存在时创建一个新的文件

a(追加) 向文本文件尾添加数据 指定文件不存在时创建一个新的文件

rb(只读) 为了输入数据 打开一个二进制文件 指定文件不存在时出错

wb(只写) 为了输出数据,打开一个二进制文件 指定文件不存在时创建一个新的文件

ab(追加) 向二进制文件尾添加数据 指定文件不存在时创建一个新的文件

关闭文件:
fclose(pf);
pf=NULL;//防止pf成为野指针

对文件内容的操作:

顺序读写

fgetc(FILE* pf): 字符输入 读一个文件里的字符
//如果成功读取字符的话,返回的是字符的ascll值
//如果读取失败或文件末尾时 返回EOF(-1) 为了兼容EOF所以返回值是int型

fputc(int(要写入的字符) , FILE* pf) 字符输出 写字符到一个流里

fputs(const char* str, FILE* pf) 把str指向的字符串写到pf中

fgets(char* str, int num, FILE* pf) 最多读num-1个要给最后的\0留一个位置
从pf中读num个字符放到str中 不会换行读取 如果长度允许会放入\n

fprintf比printf多一个FILE* pf参数
fprintf(pf, " ", a,b,c…)以文本的形式写到pf文档中
fscanf比scanf多一个参数FILE* pf
fscanf(pf, " ",&a,&b…)读取文件放入变量中

scanf–从标准输入流上读取格式化大数据
fscanf-从指定的输入流上读取格式化的数据

printf–把数据以格式化的形式打印标准的输出流上
fprintf–把数据以格式化的形式打印指定的输出流上
sprintf–把格式化数据转化成字符串

fwrite(const void* ptr(数组的起始地址), size_t size(数组元素大小),size_t count(写入个数), FILE* pf)
将count个内容从数组写入pf中以二进制的形式读取
fread与fwrite同理

文件随机读写

fseek—根据文件指针的位置和偏移量来定位文件指针
fseek(FILE* pf, long int offeset(偏移量), int origin(起始位置) )
SEEK_SET文件起始位置
SEEK_CUR当前位置
SEEK_END末尾位置

ftell返回文件指针相对于起始位置的偏移量
ftell(FILE* pf)

rewind让文件指针位置回到起始位置

文件结束的判定

不能用feof的返回值直接判定文件读取是否结束
feof是判断是否到文件末尾
ferror是判断文件是否遇到错误
在进行判断时两者都要使用

  • 24
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值