文件的随机读/写
要实现文件随机读写, 位置指针的随机移动是关键, 也就是文件位置指针可以根据读写 需要可以方便的定位到文件的任意位置。
设定文件内部位 置指针的函数主要有两个,即rewind函数和?fseek函数。
rewind(文件指针): 它的功能是把文件内部的位置指针移到文件首。
fseek函数用来移动文件内部位置指针,其调用形式为:
fseek(文件指针,位移量,起始点)
其中:
“ 文件指针” 指向被移动位置指针的文件类型指针。
“ 位移量” 表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB时不会出错。当用常量表示位移量时,要求加后缀“L” 。
“ 起始点” 表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文 件尾。
其表示方法如下表。
起始点 表示符号 数字表示
文件首 SEEK_SET 0
当前位置 SEEK_CUR 1
文件末尾 SEEK_END 2
例如:
fseek(fp,100L,0);
其意义是把位置指针移到离文件首 100个字节处。
还要说明的是 fseek函数一般用于二进制文件。在文本文件中由于要进行转换,故往往计算的位置会出现错误。
常用fread 和fwrite 函数对文件进行随机读写。
*/
//例7 :使用文件随机读写方式取出程序 例6 生成的二进制文件中第 4 名学生
#include<stdio.h>
#include<stdlib.h>
struct stu
{
char name[10];
int num;
int age;
char addr[15];
};
void main()
{
FILE *fp;
char ch;
struct stu stu01;
int i=0; //i用于记录
if((fp=fopen("c:\\stu_list","rb"))==NULL)
{
printf("Cannot open the file!!");
getchar();
exit(1);
}
rewind(fp);
fseek(fp,i*sizeof(struct stu),0);
fread(&stu01,sizeof(struct stu),1,fp);
printf(" \n\nname \tnumber age addr\n");
printf("%s\t%5d%7d%8s\n",stu01.name,stu01.num,stu01.age,stu01.addr);
fclose(fp);
}
另外:
C语言中常用的文件检测函数有以下几个。
1.文件结束检测函数 feof
feof 函数的功能是判断文件是否处于文件结束位置,如文件结束,则返回值为1,否则
返回值为 0.
函数调用的一般
形式是: feof(文件指针);
2.读写文件出错检测函数 ferror
ferror 函数的功能是检查文件在用各种输入输出函数进行读写时是否出错。如 ferror
返回值为 0表示未出错,否则表示有错。
ferror 函数调用格式:
ferror(文件指针);
3.文件出错标志和文件结束标志置 0 函数 clearerr
clearerr 函数的功能是用于清除出错标志和文件结束标志,使他们为 0 值。
clearerr 函数调用格式:
clearerr(文件指针)