第10节 对文件的输入输出.ppt
文本预览下载声明
10.4.1 文件位置标记及其定位 2. 文件位置标记的定位 可以强制使文件标记指向指定的位置 可以用以下函数实现: (2) 用fseek函数改变文件标记 fseek函数的调用形式为: fseek(文件类型指针,位移量,起始点) 起始点0代表“文件开始位置”,1为“当前位置”,2为“文件末尾位置” C标准指定的名字 起始点 名 字 用数字代表 文件开始位置 SEEK_SET 0 文件当前位置 SEEK_CUR 1 文件末尾位置 SEEK_END 2 位移量指以起始点为基点,向前移动的字节数。位移量应是long型数据(在数字的末尾加一个字母L)。 fseek函数一般用于二进制文件。下面是fseek函数调用的几个例子: fseek (fp,100L,0); 将位置指针移到离文件头100个字节处 fseek (fp,50L,1); 将位置指针移到离当前位置50个字节处 fseek (fp,-10L,2); 将位置指针从文件末尾处向后退10个字节 10.4.1 文件位置标记及其定位 2. 文件位置标记的定位 可以强制使文件位置标记指向指定的位置 可以用以下函数实现: (3) 用ftell函数测定文件位置标记的当前位置 ftell函数的作用是得到流式文件中文件位置标记的当前位置。 由于文件中的文件位置标记经常移动,人们往往不容易知道其当前位置,所以常用ftell函数得到当前位置,用相对于文件开头的位移量来表示。如果调用函数时出错(如不存在fp指向的文件),ftell函数返回值为-1L。例如: i=ftell(fp); if(i==-1L) printf(“error\n”); 10.4.2 随机读写 例10.6 在磁盘文件上存有10个学生的数据。要求将第1,3,5,7,9个学生数据输入计算机,并在屏幕上显示出来。 要求:从例10.4中建立的“stu.dat”中读入数据 10.4.2 随机读写 解题思路: 按二进制只读方式打开文件 将文件位置标记指向文件的开头,读入一个学生的信息,并把它显示在屏幕上 再将文件标记指向文件中第3,5,7,9个学生的数据区的开头,读入相应学生的信息,并把它显示在屏幕上 关闭文件 #includestdio.h #include stdlib.h struct St { char name[10]; int num; int age; char addr[15]; }stud[10]; int main() { int i; FILE *fp; if((fp=fopen(“stu.dat”,“rb”))==NULL) { printf(can not open file\n); exit(0); } for(i=0;i10;i+=2) { fseek(fp,i*sizeof(struct St),0); fread(stud[i], sizeof(struct St),1,fp); printf(“%-10s %4d %4d %-15s\n”, stud[i].name,stud[i].num, stud[i].age,stud[i].addr); } fclose(fp); return 0; } 10.5 文件读写的出错检测 1.ferror函数 ferror函数的一般调用形式为 ferror(fp); 如果返回值为0,表示未出错,否则表示出错 每次调用输入输出函数,都产生新的ferror函数值,因此调用输入输出函数后立即检查 调用fopen时,ferror的初始值自动置为0 10.5 文件读写的出错检测 2. clearerr函数 作用是使文件错误标志和文件结束标志置为0 调用一个输入输出函数时出现错误(ferror值为非零值),立即调用clearerr(fp),使ferror(fp)值变0,以便再进行下一次检测 只要出现文件读写错误标志,它就一直保留,直到对同一文件调用clearerr函数或rewind函数,或任何其他一个输入输出函数 小结: 教学要求: 理解文件的概念及特点、文本文件与二进制文件的区别与适用场合,掌握文件的打开、读写和关闭操作 。 主要内容: (1)基本的输入输出 :输入输出的有关概念、实现机制。 (2)文件的概念与类型 :文件的概念,文本文件与二进制文件的区别 。 (3)文件的操作:文件的打开、读写、关闭操作的实现方式。 例10.3 从键盘读入若干个字符串,对它们按字母大小的顺序排序,然后把排
显示全部