关于C语言“文件”的知识点

 分享一些我在学习C语言文件时学习到的知识点。


文件
概念:
文件是存储在外部存储介质上(如磁盘)的数据的集合。
文件有俩大类:第一类是程序文件(源文件.c  目标程序文件.obj  可执行文件.exe);第二类是数据文件(文件里是输入输出数据,如文本文件,图像文件,声音文件)

数据文件分类:
按数据存储的编码形式,数据文件可分为文本文件和二进制文件两种。文本文件是以字符ASCII码值进行存储与编码的文件,其文件的内容就是字符。二进制文件是存储二进制数据的文件,按字节来存储。
(C语言源程序是文本文件,C程序的目标文件和可执行文件是二进制文件。)

缓冲文件系统
进行文件操作时,系统为每一个文件分配一块文件内存缓冲区(内存单元,一个磁盘扇区大小,512B),先把磁盘读出的数据放在缓存区,计算机在直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取。这样可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度.

文件类型指针:FILE *fp
文件操作具有顺序性特点,前一个数据读取后,下一次将顺序读取后一个数据(文件内部位置指针后移一位)

fopen
fp=fopen("文件名","文件打开方式")
文件名如果不指定文件路径,默认与当前应用程序当前路径相同

判断文件是否正常打开:
if((fp=fopen("abc.txt","r"))==NULL)
{
printf("File open error");
exit(0);
}


文件打开方式:
r:打开文本文件进行只读
w:建立新文本文件进行只写
a:打开文本文件进行追加
r+:打开文本文件进行读/写
w+:建立新文本文件进行读/写
a+:打开文本文件进行读/写/追加
rb:打开二进制文件进行只读
wb:建立新二进制文件进行只写
ab:打开二进制进行追加
rb+:打开二进制文件进行读/写
wb+:建立新二进制文件进行读/写
ab+:打开二进制文件进行读/写/追加

读文件,文件必须存在,否则出错
写文件:
如果文件不存在,新建文件;
如果存在,w将原文件删除然后重新建立,a写入数据添加在文件原数据后面,不删去原文件内容


fclose
fclose(文件指针);文件关闭返回0
判断文件是否正常关闭:
if(fclose(fp))
{
printf("can not close the file");
exit(0);

文件字符方式读写函数fgetc()和fputc
ch=fgetc(fp)
fputc(ch,fp)
打开文件时fp指针指向文件首部,fgetc()函数在读到有效字符时,会向后移动指针,若读到文件末尾,则会读到一个无效的字符,返回EOF

EOF(^z、ctrl+z):
文件结束符,它不是常规的ASCII码,而是一个值为-1常量,读文件时通过判断文件读入字符是否为eof来决定循环是否继续
只是为了标识已经读到文件末尾,它并不是一个存储在文件中的字节

文件末尾检测函数feof()
feof(fp),函数返回1表示到了文件结束位置,0表示文件未结束。任何文件都能判断是否结尾
feof通过  已读  的字符是不是合法字符来判断是否到了文件末尾,判断的是已读取的字符(feof使用前,必须有文件读函数fgetc,fread,才能有意义)

判断文件是否结尾:
文本文件:
ch=getchar(fp);
while(ch!=EOF)
ch=getchar(fp)
或者
ch=getchar(fp);
while(!feof(fp))
ch=getchar(fp)
二进制文件:ch=getchar(fp);
while(!feof(fp))
ch=getchar(fp)

文件字符串读写函数fputs()和fgets()
fputs(s,fp)
s是字符串地址,fp是文件指针
fgets(s,n,fp)
s是字符数组名或字符指针。从文件fp读取字符串(最多n-1个字符)到s里

格式化方式文件读写函数fscanf()和fprintf()
fscanf(文件指针,格式字符串,输入表)
fprintf(文件指针,格式字符串,输出表)
例:fscanf(fp,"%d%f",&n,&x);fprintf(fp,"%d%f",n,x);

数据块方式文件读写函数fread()和fwrite()
(多用于二进制文件。数据块是一组数据,如数组,结构变量)
fread(buffer,size,count,fp)
fwrite(buffer,size,count,fp)
buffer是指针,输入输出数据的地址
size是数据块字节数,即数据块大小(sizeof)
count是数据块数
例:struct sysuser u[5],*pu=u;
fwrite(pu,sizeof(struct sysuser),5,fp);

重定位文件首函数rewind()
定位文件读写位置指针 指向文件首地址
rewind(fp)

指针移动控制函数fseek()
fseek(fp,offset,from)
fp是文件指针
offset表示移动偏移量(常用到sizeof,如sizeof(struct data),也可是常量,如20L为20个字节),正值表示从当前位置向后计算,负值为向前计算。
from表示从哪里计算偏移量(0为文件首部,1为当前位置,2为文件末尾)

获取指针当前位置函数ftell()
返回值是相对于文件开头的位移量(字节数)
例:end=ftell(fp)

读写错误检查函数ferror()
检查文件在各种输入输出函数进行读写时是否出错,返回0未出错,否则有错
ferror(文件指针)

出错标记清除函数clearerr()
清除出错标志和文件结束标志,使他们为0值
clearerr(文件指针)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值