c语言程序设计与实训,C语言程序设计与实训第12章.ppt

C语言程序设计与实训第12章.ppt

第12章 文件,12.1 文件概述 12.2 文件类型指针 12.3 文件打开与关闭 12.4 文件读写 12.5 文件定位,12.1 文件概述 所谓文件是指一组相关数据的有序集合。这个数据集有一个名称,叫做文件名。实际上在前面的各章中已经多次使用了文件,例如源程序文件、目标文件、可执行文件、库文件头文件等。文件通常是驻留在外部介质如磁盘等上的,在使用时才调入内存中来。从不同的角度可对文件作不同的分类。从用户的角度看,文件可分为普通文件和设备文件两种。 在C语言中,文件是字符字节的序列,称字节流,或称二进制流。根据数据的组织形式,C文件可分为ASCII码文件又称文本文件,或称正文文件和二进制文件。 例如整数 int a1025,这两种文件的存储形式是不同的,如图所示。,第12章 文件,图12-2 打开文件、读或写、关闭文件,文件处理必须包含三个基本过程打开文件,读或写,关闭文件。,第12章 文件,12.1 文件概述,第12章 文件,12.2 文件类型指针 流式文件分打开、关闭、读、写、定位等各种操作。文件指针在语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。 文件缓冲区是一种结构类型,在库头文件stdio.h 中定义,typedef struct short level; unsigned flags; char fd; unsigned char hold; short bsize; unsigned char *buffer; unsigned char *curp; unsigned istemp; short token; FILE;,第12章 文件,12.2 文件类型指针 文件定义的一般格式 FILE 文件指针; FILE 是文件缓冲区的类型名,必须大写。文件指针指向文件缓冲区的指针。 例如FILE *fp; 文件缓冲区是一片内存空间,存放着处理文件的有关信息,fp指向这片内存空间。文件处理全由库函数实现。 其中FILE应为大写,它实际上是由系统定义的一个结构,该结构中含有文件名、文件状态和文件当前位置等信息。在编写源程序时不必关心FILE结构的细节。,12.3 文件打开与关闭,12.3.1 文件打开函数 利用函数用来打开一个文件。 打开文件需调用库函数。它的一般调用格式 文件说明符,模式; 文件说明符指定打开的文件名,可以包含盘符 、路径、文件名,是字符串。模式指定打开的文件读写方式,是字符串,必须小写。模式如下 文本文件默认参数t可以不写 r 只读 r 读写 w 只写 w 读写 a 追加,写 a 追加,读写 二进制文件参数b表示二进制 rb 只读 rb 读写 wb 只写 wb 读写 ab 追加,写 ab 追加,读写,12.3 文件打开与关闭,12.3.2 文件关闭函数 关闭文件需调用库fclose函数。它的一般调用格式 fclose文件指针; 例如fclosefp; 文件一旦使用完毕,应用关闭文件函数把文件关闭,以避免文件的数据丢失等错误。正常完成关闭文件操作时,fclose函数返回值为0。如返回非零值则表示有错误发生。,12.4 文件读写,12.4.1 字符读写函数 1. 读字符函数fgetc fgetc函数的功能是从指定的文件中读一个字符,函数调用的形式为 字符变量fgetc文件指针;例如chfgetcfp;其意义是从打开的文件fp中读取一个字符并送入ch中。 对于fgetc函数的使用有以下几点说明 1在fgetc函数调用中,读取的文件必须是以读或读写方式打开的。 2读取字符的结果也可以不向字符变量赋值,例如fgetcfp;但是读出的字符不能保存。 3在文件内部有一个位置指针。用来指向文件的当前读写字节。在文件打开时,该指针总是指向文件的第一个字节。使用fgetc函数后,该位置指针将向后移动一个字节。因此可连续多次使用fgetc函数,读取多个字符。应注意文件指针和文件内部的位置指针不是一回事。文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。,12.4 文件读写,12.4.1 字符读写函数 2. 写字符函数fputc fputc函数的功能是把一个字符写入指定的文件中,函数调用的形式为fputc字符量,文件指针;其中,待写入的字符量可以是字符常量或变量,例如fputca,fp;其意义是把字符a写入fp所指向的文件中。 对于fputc函数的使用也要说明几点 1被写入的文件可以用、写、读写、追加方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容,写入字符从文件首开始。如需保留原有文件内容,希望写入的字符以文件末开始存放,必须以追加方式打开文件。被写入的文件若不存在,则创建该文件。 2每写入一个字符,文件内部位置指针向后移动一个字节。 3fputc函数有一个返回值,如写入成功则返回写入的字符,否则返回一个EOF。可用此来判断写入是否成功。,12.4 文件读写,12.4.2 字符串读写函数 1. 读字符串函数fgets 函数的功能是从指定的文件中读一个字符串到字符数组中, 函数调用的形式为fgets字符数组名,n,文件指针; 其中的n是一个正整数。表示从文件中读出的字符串不超过n-1个字符。在读入的最后一个字符后加上串结束标志0。例如fgetsstr,n,fp;的意义是从fp所指的文件中读出n-1个字符送入字符数组str中。,12.4 文件读写,12.4.2 字符串读写函数 2. 写字符串函数 函数的功能是向指定的文件写入一个字符串。 其调用形式为字符串,文件指针 其中字符串可以是字符串常量,也可以是字符数组名,或指针变量。 例如“abcd“,fp;其意义是把字符串“abcd“写入fp所指的文件之中。,12.4 文件读写,12.4.3 数据块读写函数 语言还提供了用于整块数据的读写函数。可用来读写一组数据,如一个数组元素,一个结构变量的值等。 读数据块函数调用的一般形式为freadbuffer,size,count,fp; 写数据块函数调用的一般形式为fwritebuffer,size,count,fp; 其中buffer是一个指针,在fread函数中,它表示存放输入数据的首地址。在fwrite函数中,它表示存放输出数据的首地址。size 表示数据块的字节数。count表示要读写的数据块块数。fp表示文件指针。 例如freadfa,4,5,fp; 其意义是从fp所指的文件中,每次读4个字节一个实数送入实数组fa中,连续读5次,即读5个实数到fa中。 2. 写字符串函数 函数的功能是向指定的文件写入一个字符串。 其调用形式为字符串,文件指针 其中字符串可以是字符串常量,也可以是字符数组名,或指针变量。 例如“abcd“,fp;其意义是把字符串“abcd“写入fp所指的文件之中。,12.4 文件读写,12.4.4 格式化读写函数 fscanf函数,fprintf函数与前面使用的scanf和printf函数的功能相似,都是格式化读写函数。两者的区别在于fscanf 函数和fprintf函数的读写对象不是键盘和显示器,而是磁盘文件。 这两个函数的调用格式为 fscanf文件指针,格式字符串,输入表列; fprintf文件指针,格式字符串,输出表列; 例如fscanffp,“ds“12.5 文件定位,文件定位移动文件内部位置指针的函数主要有两个,即rewind函数和fseek函数。 1rewind函数前面已多次使用过,其调用形式为rewind文件指针;它的功能是把文件内部的位置指针移到文件首。 2fseek函数来移动文件内部位置指针。 其调用形式为 fseek文件指针,位移量,起始点; 其中“文件指针”指向被移动的文件。“位移量”表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB时不会出错。当用常量表示位移量时,要求加后缀“L”。“起始点”表示从何处开始计算位移量,规定的起始点有三种文件首、当前位置和文件尾,如下表所示.,本章小结,1. 系统把文件当作一个“流”,按字节进行处理。 2. 文件按编码方式分为二进制文件和ASCII编码文件。 3. 语言中,用文件指针标识文件,当一个文件被打开时 ,可取得该文件指针。 4. 文件在读写之前必须打开,读写结束必须关闭。 5. 文件可按只读、只写、读写、追加四种操作方式打开,同时还必须指定文件的类型是二进制文件还是文本文件。 6. 文件可按字节,字符串,数据块为单位读写,文件也可按指定的格式进行读写。 7. 文件内部的位置指针可指示当前的读写位置,移动该指针可以对文件实现随机读写。,谢谢,Thanks,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值