C语言学习教程第十章-文件(7)

文件的随机读写

前面介绍的对文件的读写方式都是顺序读写, 即读写文件只能从头开始,顺序读写各个数据。 但在实际问题中常要求只读写文件中某一指定的部分。 为了解决这个问题可移动文件内部的位置指针到需要读写的位置,再进行读写,这种读写称为随机读写。 实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。文件定位移动文件内部位置指针的函数主要有两个, 即 rewind 函数和fseek函数。

rewind函数前面已多次使用过,其调用形式为: rewind(文件指针); 它的功能是把文件内部的位置指针移到文件首。 下面主要介绍
fseek函数。

fseek函数用来移动文件内部位置指针,其调用形式为: fseek(文件指针,位移量,起始点); 其中:“文件指针”指向被移动的文件。 “位移量”表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB 时不会出错。当用常量表示位移量时,要求加后缀“L”。“起始点”表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾。
其表示方法如表10.2。
起始点 表示符号 数字表示
──────────────────────────
文件首 SEEK—SET 0
当前位置 SEEK—CUR 1
文件末尾 SEEK—END 2
例如:
fseek(fp,100L,0);其意义是把位置指针移到离文件首100个字节处。还要说明的是fseek函数一般用于二进制文件。在文本文件中由于要进行转换,故往往计算的位置会出现错误。文件的随机读写在移动位置指针之后, 即可用前面介绍的任一种读写函数进行读写。由于一般是读写一个数据据块,因此常用fread和fwrite函数。下面用例题来说明文件的随机读写。

[例10.8]在学生文件stu list中读出第二个学生的数据。
#include<stdio.h>
struct stu
{
char name[10];
int num;
int age;
char addr[15];
}boy,*qq;
main()
{
FILE *fp;
char ch;
int i=1;
qq=&boy;
if((fp=fopen("stu_list","rb"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
rewind(fp);
fseek(fp,i*sizeof(struct stu),0);
fread(qq,sizeof(struct stu),1,fp);
printf("\n\nname\tnumber age addr\n");
printf("%s\t%5d %7d %s\n",qq->name,qq->num,qq->age,
qq->addr);
}
文件stu_list已由例10.6的程序建立,本程序用随机读出的方法读出第二个学生的数据。程序中定义boy为stu类型变量,qq为指向boy的指针。以读二进制文件方式打开文件,程序第22行移动文件位置指针。其中的i值为1,表示从文件头开始,移动一个stu类型的长度, 然后再读出的数据即为第二个学生的数据。

时间: 2024-11-30 10:35:05

C语言学习教程第十章-文件(7)的相关文章

C语言学习教程第十章-文件(3)

fclose函数 调用的一般形式是: fclose(文件指针): 例如:fclose(fp); 正常完成关闭文件操作时,fclose函数返回值为0.如返回非零值则表示有错误发生.文件的读写对文件的读和写是最常用的文件操作. 在C语言中提供了多种文件读写的函数: ·字符读写函数 :fgetc和fputc·字符串读写函数:fgets和fputs·数据块读写函数:freed和fwrite·格式化读写函数:fscanf和fprinf 下面分别予以介绍.使用以上函数都要求包含头文件stdio.h.字符读写

C语言学习教程第十章-文件(8)

文件检测函数 C语言中常用的文件检测函数有以下几个.一.文件结束检测函数feof函数调用格式: feof(文件指针): 功能:判断文件是否处于文件结束位置,如文件结束,则返回值为1,否则为0. 二.读写文件出错检测函数ferror函数调用格式: ferror(文件指针): 功能:检查文件在用各种输入输出函数进行读写时是否出错. 如ferror返回值为0表示未出错,否则表示有错. 三.文件出错标志和文件结束标志置0函数clearerr函数调用格式: clearerr(文件指针); 功能:本函数用于

C语言学习教程第十章-文件(6)

数据块读写函数fread和fwrite C语言还提供了用于整块数据的读写函数. 可用来读写一组数据,如一个数组元素,一个结构变量的值等.读数据块函数调用的一般形式为: fread(buffer,size,count,fp); 写数据块函数调用的一般形式为: fwrite(buffer,size,count,fp); 其中buffer是一个指针,在fread函数中,它表示存放输入数据的首地址.在fwrite函数中,它表示存放输出数据的首地址. size 表示数据块的字节数.count 表示要读写的

C语言学习教程第十章-文件(1)

文件 文件的基本概念所谓"文件"是指一组相关数据的有序集合. 这个数据集有一个名称,叫做文件名. 实际上在前面的各章中我们已经多次使用了文件,例如源程序文件.目标文件.可执行文件.库文件 (头文件)等.文件通常是驻留在外部介质(如磁盘等)上的, 在使用时才调入内存中来.从不同的角度可对文件作不同的分类.从用户的角度看,文件可分为普通文件和设备文件两种. 普通文件是指驻留在磁盘或其它外部介质上的一个有序数据集,可以是源文件.目标文件.可执行程序: 也可以是一组待输入处理的原始数据,或者是

C语言学习教程第十章-文件(5)

一.读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针): 其中的n是一个正整数.表示从文件中读出的字符串不超过 n-1个字符.在读入的最后一个字符后加上串结束标志'\0'.例如:fgets(str,n,fp);的意义是从fp所指的文件中读出n-1个字符送入字符数组str中.[例10.4]从e10_1.c文件中读入一个含10个字符的字符串.#include<stdio.h>main(){FILE *fp;char

C语言学习教程第十章-文件(4)

二.写字符函数fputc fputc函数的功能是把一个字符写入指定的文件中,函数调用的 形式为: fputc(字符量,文件指针): 其中,待写入的字符量可以是字符常量或变量,例如:fputc('a',fp);其意义是把字符a写入fp所指向的文件中. 对于fputc函数的使用也要说明几点:1. 被写入的文件可以用.写.读写,追加方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容,写入字符从文件首开始.如需保留原有文件内容,希望写入的字符以文件末开始存放,必须以追加方式打开文件.被写

C语言学习教程第十章-文件(2)

文件打开函数fopen fopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名,使用文件方式) 其中,"文件指针名"必须是被说明为FILE 类型的指针变量,"文件名"是被打开文件的文件名. "使用文件方式"是指文件的类型和操作要求."文件名"是字符串常量或字符串数组.例如: FILE *fp:fp=("file a","r");其意义是在当前目录下打开文件f

C语言学习教程第三章-C语言程序设计初步(1)

C语言程序设计 本课介绍C语言程序设计的基本方法和基本的程序语句.从程序流程的角度来看,程序可以分为三种基本结构, 即顺序结构.分支结构.循环结构. 这三种基本结构可以组成所有的各种复杂程序.C语言提供了多种语句来实现这些程序结构. 本章介绍这些基本语句及其应用,使读者对C程序有一个初步的认识, 为后面各章的学习打下基础. C程序的语句 C程序的执行部分是由语句组成的. 程序的功能也是由执行语句实现的.C语句可分为以下五类:1.表达式语句2.函数调用语句3.控制语句4.复合语句5.空语句 1.表

C语言学习教程第四章-数组(3)

二维数组 前面介绍的数组只有一个下标,称为一维数组, 其数组元素也称为单下标变量.在实际问题中有很多量是二维的或多维的, 因此C语言允许构造多维数组.多维数组元素有多个下标, 以标识它在数组中的位置,所以也称为多下标变量. 本小节只介绍二维数组,多维数组可由二维数组类推而得到.二维数组类型说明二维数组类型说明的一般形式是: 类型说明符 数组名[常量表达式1][常量表达式2]-: 其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度.例如: int a[3][4]; 说明了一个