C学习记录9——文件

11 篇文章 1 订阅

一、文件概述

1.磁盘文件与设备文件

磁盘文件:一组相关数据的有序集合,通常存在外部介质上,使用时才调入内存。
设备文件:在操作系统中把每个与主机相连的输入输出设备看作一个文件,把它们的输入、输出等同于对磁盘文件的读、写。

2.磁盘文件的分类

  • 文本文件:基于字符编码如ASCII、Unicode
  • 二进制文件:基于值编码,根据具体应用,指定值序号

一般可用文本编辑器直接打开

二、文件的打开和关闭

1.文件指针

FILE是系统用typedef定义的结构体类型(在<stdio.h>中),含文件名、文件状态、文件当前位置等信息。
C中有三个特殊文件指针系统默认打开,可直接使用:

  • stdin:标准输入,默认为当前终端(键盘)scanf、getchar
  • sidout:标准输出,默认屏幕 printf、puts
  • stdeer:标准出错,默认屏幕 perror

2.文件打开

FILE* fp = fopen("路径+文件名","打开模式");
路径中的\需要用/代替
打开模式:"r"只读

3.文件关闭

  • 文件打开后不关会占内存
  • 一个进程同时打开文件数量有限(65535,unsigned short最大值),超出则打开无效
  • 若未关闭文件,程序退出时,操作系统同一关闭
    fclose(fp);fp为文件指针

三、文件的顺序读写

1.按字符读写文件fgetc()、fputc()

1)读

char ch;
ch = fgetc(fp);  //不能改文件指针,文件读取时光标流会自动向下移动
printf("%c\n",ch);

2)文件结尾EOF
EOF(end of file)表示文件结束(文本文件),或表示一个无效字符
EOF值为-1,(可用于while条件)

feof(文件指针);判断文件是否结束(二进制文件、文本文件均可),返回非0,已结尾;0,未结尾。

3)写

char ch = 'a';
fputc(ch,fp);  //返回输入的字符

要以写(“w”)的形式打开文件,若文件不存在会创建新文件,若文件存在,会清空内容

4)行读写 fgets()、fputs()

2.文件格式化读写fprintf()、fscanf()

int a,b,c;
fscanf(fp,"%d%d%d\n",&a,&b,&c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
fprintf(fp,"%d%d%d\n",1,2,3);

3.块读写文件fread、fwrite

对二进制文件;bat 批处理文件
fwrite(&a,sizeof(int),1,fp);
读取/写入数据地址,块数据大小,块数,打开的文件指针

fread(&b,sizeof(int),1,fp);
输出时可以块数据大小为1,块数为4,也可以块数据大小为2,块数为2,只要保证整体大小相同即可

4.获取文件状态

#include <sys/types.h>
#include <sys/stat.h>
stat(文件名(路径),保存文件信息的结构体指针&st);
	struct stat st;

5.文件随机读写

fseek(fp,偏移量,whence);移动光标位置
偏移量:+左,-右,单位字节
左移超过开头出错,右移超过末尾,再次写入时增大文件尺寸
whence:SEEK_SET:从文件开头 0
SEEK_CUR:从当前位置 1
SEEK_END:从文件末尾 2

long ftell(FILE * stream);获取文件流(光标)读写位置
rewind(fp);将光标移至文件开头

6.删除文件,重命名文件

remove(fp);返回0,删除成功(不进回收站
rename(fp,newpath);重命名
注意路径(改变路径可实现移动、剪切功能

更新缓冲区(不要频繁,频繁与硬盘交换,会损伤硬盘
fflush(fp);让缓冲区数据立马写入文件中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值