第17讲-文件操作(2)PPT课件
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
⑤ fseek(fp, -10L, SEEK_END);
从文件的尾部退回10个 字节的位置
注:fseek()函数一般用于二进制文件
测定文件位置指针当前位置的函数ftell() 格式:long ftell(文件指针) 功能:返回文件位置指针当前位置(用相对于文件头的位移量表 示,如果返回值为-1L,则表明调用出错)
文件读写位置指针:文件中有一个指向将要读写的下一个字 符的位置标记,这称为读写位置指针。每次读写一个(或一组) 数据后,系统自动将读写位置指针移动到下一个读写位置上。 (类似于文本编辑器的“光标”)
要实现数据文件的随机访问,就是要人为地控制文件的读写 位置指针,让它在读写操作之前移动到合适的位置上,之后要 进行相应的读写操作。
#include <stdio.h> #include <stdlib.h> int main() {
FILE *fp1,*fp2; if((fp1=fopen("e:\\a.txt","r"))==NULL) {
printf("不能打开a.txt文件!"); exit(0); }
if((fp2=fopen("e:\\b.txt","w"))==NULL) {
(2)文件的定位函数
位置指针复位函数rewind() 格式:int rewind(文件指针); 功能:使文件的位置指针返回到文件头
例1: 对一个磁盘文件进行显示、复制两次操作
解题思路:第一次操作是从头到尾读取文件内容,并显示在 屏幕上;此时,文件指针已到文件尾,可以用rewind()函数 回拨文件指针到文件头;第二次操作是复制文件。
参照点 文件首 当前位置 文件末尾
表示符号 SEEK_SET SEEK_CUR SEEK_END
数字表示 0 1 2
位移量:以参照点为起点,向文件尾方向(当位移量>0时)或向 文件头方向(当位移量<0时)移动的字节数。在ANSI C标准中, 要求位移量为long int型数据
请wenku.baidu.com明下列语句的功能(fp为文件指针):
#include <stdlib.h> #include<stdio.h> struct student_type // 学生数据类型 {
char name[10]; int num; int age; char addr[15]; }stud[10];
int main() { int i; FILE *fp; if((fp=fopen("F:\\stu.dat","rb"))==NULL) // 以只读方式打开二进制文件 {
printf("can not open file\n"); exit(0); } for(i=0;i<10;i+=2) { fseek(fp,i*sizeof(struct student_type),0); // 移动位置指针 fread(&stud[i], sizeof(struct student_type),1,fp); // 读一个数据块到结构体变量 printf("%-10s %4d %4d %15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr); // 在屏幕输出 } fclose(fp); return 0; }
若将该函数与fseek()一起使用,可以获取文件的长度:
fseek(fp,0L,2); long n=ftell(fp);
例2:在磁盘文件上存有10个学生的数据。要求将第1,3,5,7,9 个学生数据输入计算机,并在屏幕上显示出来。
要求:从前面例子中建立的“stu.dat”中读入数据
解题思路:按二进制只读方式打开文件;将文件位置指针指 向文件的开始处,读入一个学生的信息,并把它显示在屏幕 上;再将文件指针指向文件中第3,5,7,9个学生的数据 区的开头,读入相应学生的信息,并把它显示在屏幕上;最 后关闭文件。
第17讲 文件操作(2)
随机读写数据文件 文件读写出错检测函数
教学目标
理解文件读写位置指针的概念,清楚随机读写文件的关键点 是移动文件读写位置指针;
掌握文件定位函数(rewind()、fseek()和ftell())的用法; 了解文件读写出错检测函数(ferror()和clearerr())的用法。
将位置指针移动到文件中任何位置的函数fseek() 格式:int fseek(文件类型指针,位移量,参照点) 功能:将指定文件的位置指针,从参照点开始,移动指定的字 节数
说明:
参照点:表示位置移动的基准点,它可以是文件的开始,也 可以是文件的当前位置,或者是文件的末尾;既可以用数字 表示,也可以用符号常量表示,如下表所示:
重点:文件读写指针,文件定位函数(rewind()、fseek()和 ftell())的用法
难点:文件的随机读写
1. 随机读写数据文件
(1)文件读写位置指针
文件的顺序读写都是从文件头开始的,数据的读写要按其物 理存储顺序来进行的,只有读写了前面数据才能读写后面的数 据,这种读写方式效率不高;
随机访问不是按数据在文件中的物理位置次序进行读写,而 是可以对任何位置上的数据进行访问,显然这种方法比顺序访 问效率高得多;
printf("不能打开b.txt文件!"); exit(0); } printf("\na.txt文件内容如下:\n"); while(!feof(fp1)) putchar(getc(fp1));//在屏幕上输出文件内容 rewind(fp1);//回拨文件指针到文件头 while(!feof(fp1)) putc(getc(fp1),fp2);//复制文件内容 printf("\na.txt内容已复制到b.txt中!\n\n"); fclose(fp1); fclose(fp2); return 0; }
① fseek(fp, 0L, SEEK_SET);
定位到文件开始处
② fseek(fp, 20L, SEEK_SET); ③ fseek(fp, 2L, SEEK_CUR);
定位到文件的第20个字节 处
从文件的当前位置向尾部 移动2个字节的位置
④ fseek(fp, 0L, SEEK_END); 定位到文件的尾部