C语言基础知识整理21文件读写

顺序读写数据文件

文件打开之后,就可以对它进行读写了。在顺序写时,先写入的数据存放在文件中前面的位置,后写入的数据存放在文件中后面的位置。在顺序读时,先读文件中前面的数据,后读文件中后面的数据。即对顺序读写来说,对文件读写数据的顺序和数据在文件中的物理顺序是一致的。顺序读写需要用库函数实现。

读字符 fgetc(fp);写字符fput(ch,fp);

函数名

调用形式

功能

返回值

fgetc

fgetc(fp)

从fp指向的文件读入一个字符

读成功,带回所读字符,失败则返回文件结束标志EOF(即-1)

fputc

fputc(ch,fp)

把字符ch写到文件指针变量fp所指向的文件中

输出成功,返回值就是输出的字符;输出失败,则返回EOF(即-1)

//c系统中在stdio.h中把fgetc定义为getc     #define   getc(fp)     fgetc(fp)

//c系统中在stdio.h中把fputc定义为putc   #define   putc(ch,fp)   fputc(ch,fp)

检测文件读写位置标记feof(文件指针);

//检测文件读写位置标记是否移到文件末尾,即磁盘文件是否结束。

//若结束返回1(真),否则为0(假)。

读字符串fgets(str,n,fp);写字符串fputs(str,fp);

函数名

调用形式

功能

返回值

fgets

fgets(str,n,fp)

从fp指向的文件读入一个长度为(n-1)的字符串,存放到字符数组str中。

读成功,返回地址str,失败返回NULL

fputs

fputs(str,fp)

把str所指向的字符串写到文件指针变量fp所指向的文件中。

输出成功,返回0;否则返回非0值

  1. fgets的函数原型 char* fgets(char *str,int n,FILE *fp);作用是从文件读入一个字符串。调用时可以写成fgets(str,n,fp);其中n是要求得到的字符个数,但实际上只从fp所指向的文件中读入n-1个字符,然后在最后加一个’\0’字符,这样得到的字符串共有n个字符,把它们放到字符数组str中。

如果在读完n-1个字符之前遇到换行符“\n”或文件结束符EOF,读入即结束,但将所遇到的换行符“\n”也作为一个字符读入

若执行fgets函数成功,则返回值为str数组首元素的地址,如果一开始就遇到文件尾或读数据出错,则返回NULL。

  1. fputs的函数原型int fputs(char *str,FILE *fp);作用是将str所指向的字符串输出到fp所指向的文件中。调用时可以写成fputs(str,fp);。第一个参数可以是字符串常量、字符数组名或字符型指针。字符串末尾的“\0”不输出。若输出成功,函数值为0,失败时,函数值为EOF。

fgets和fputs功能类似于gets和puts,只是前者以文件为读写对象,后者以终端为读写对象。

为避免出现无法区分字符串的情况,输出一个字符串后,人为输出’\n’作为字符串间的分隔。

格式化读文件 fprintf(文件指针,格式字符串,输出表列);

将输出表列输出到文件指针指向的文件中,与输出到屏幕情况类似,只是输出的位置是文件

格式化写文件 fscanf(文件指针,格式字符串,输入表列);

从文件指针指向的位置读取,赋给输入表列

由于fprintf和fscanf,

用以上两个函数对磁盘文件读写,使用方便,容易理解,但由于要进行ASCII-二进制转换,因此在内存与磁盘需要频繁交换数据的情况下,最好不用这两个函数。

二进制读一组数据 fread(buffer,size,count,fp);

fread(buffer,size,count,fp);//从文件中读入一个数据块

二进制写一组数据 fwrite(buffer,size,count,fp);

fwrite(buffer,size,count,fp);//向文件写一个数据块

buffer:是一个地址。对fread来说,它是用来存放从文件读入的数据的存储区的地址。对fwrite来说,是要把此地址开始的存储区中的数据向文件输出(以上指的是起始地址)。

size:要读写的字节数。

count:要读写多少个数据项(每个数据项长度为size)。

fp:FILE类型指针。

打开文件时指定用二进制文件,这样就可以用fread和fwrite函数读写任何类型的信息。

fread和fwrite为int型,执行成功,返回值为形参count的值(一个整数),即输入或输出数据项的个数。

fread和fwrite函数一般用于二进制文件的输入输出。因为它们是按数据块的长度来处理输入输出的,不出现字符转换。

若有字符转换,很可能出现与原设想的情况不同。如

fread(butter,size,count,stdin);//企图通过终端键盘输入数据

//stdin是指向标准输入流的指针变量,语法没错,但由于fread函数要求一次输入size个字节(而不问这些字节内容),因此输入的分隔符也会被当成数据,导致出错。

随机读写数据文件

随机访问不是按数据在文件中的物理位置次序进行读写,而是可以对任何位置上的数据进行访问,访问效率高于顺序访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值