版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第九章文件,2,0.本章内容,掌握文件类型指针 (FILE类型指针) 掌握文件的打开与关闭 (fopen, fclose) 掌握文件的读写 (fprintf, fscanf),3,1. C文件概述,1. 定义:文件是指存储在外部介质上数据的集合。 操作系统是以文件为单位对数据进行管理的。 每一个与主机相连的输入或输出设备都看作是 一个文件。 2. 结构: 字符(字节)序列,即由一个个字符(字节)的数据顺序组成对文件的存取是以字符(字节)为单位的,这类文件称为流式文件。,4,1. C文件概述,3. 组织形式: ASCII码(文本)文件和二进制文件 ASCII码(文本)文件:文件的每一个字节放一个
2、ASCII代码,代表一个字符。 二进制文件:把内存中的数据按其在内存中的存储形式原样输出到磁盘文件上。 4. 输入和输出方式 缓冲文件系统:系统自动在内存区为每一个正在使用的文件名开辟一个缓冲区。从内存向磁盘输出数据必须先送到内存的缓冲区中,装满缓冲区后在一起送到磁盘中去。如果从磁盘向内存读入数据,则一次从磁盘文件将一批数据,5,1. C文件概述,输入到内存缓冲区,然后再从缓冲区住组逐个地将数据送到程序数据区。 非缓冲文件系统: 系统不自动开辟确定大小的缓冲区,而由程序为每个文件设定缓冲区。 对文件的读写操作通过库函数实现。,程序 数据区,输出文件 缓冲区,输入文件 缓冲区,磁盘,6,2.文件
3、类型指针,定义:缓冲文件系统中,获取内存中存放文件有关信息的结构体的指针。定义为文件类型指针。通过文件指针变量能找到指定的文件,以实现对文件的访问。 结构体类型 FILE 每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如文件名,状态,当前位置等)。这些信息保存在一个结构体类型的变量中。,7,2.文件类型指针,结构体类型由系统定义为“FILE”。 有的C版本在 stdio.h文件中有如下定义 typedef struct int _fd;; /* 文件号 */ int _cleft; /* 缓冲区中剩下的字符 */ int _mode; /* 文件操作模式 */ char *_n
4、exttc; /* 下一个字符位置 */ char *_buff; /* 文件缓冲区位置 */ FILE;,8,2.文件类型指针,例: 定义一个FILE类型的数组 FILE -efile -MAXFILE; -MAXFILE: 数组元素个数,也就是可使用文件的 最大数目。 例:定义一个文件指针变量 FILE *fp; fp是一个指向FILE结构体的指针变量。可以使 fp指向某一个具体文件的结构体变量,通过读取该结构体变量中的有关信息来实现对文件的访问和操作。也就是通过fp 指定要被访问的文件。,9,3. 文件的打开与关闭,文件的打开(函数 fopen),功能:在对文件读写之前打开文件。 调用方
5、式: FILE *fp; fp=fopen(文件名用文件方式); 返回值:指定文件的指针,若失败返回 NULL 三要素:文件指针,文件名,使用方式 例:fp=fopen(“A1”,”r”);,10,3. 文件的打开与关闭,文件使用方式,11,3. 文件的打开与关闭,文件使用方式,12,3. 文件的打开与关闭,文件的关闭,功能:使用文件之后关闭文件。使文件指针变量不在指向该文件。 调用方式: fclose(文件指针); 返回值:关闭成功返回 0,若失败返回 非零值。 例: fclose (fp); 应该在程序结束之前关闭所有使用的文件,如果不关闭文件可能会丢失数据。用fclose关闭文件,将缓冲
6、区的数据输出到磁盘后再释放文件指针变量,可避免数据丢失。,13,4. 文件读写,文件的关闭,Fprintf 功能: 将指定对象格式化输出到指定磁盘文件上 fscanf 功能: 将指定磁盘文件格式化赋给指定对象 格式 fprintf (文件指针,格式字符串,输出表列) fscanf (文件指针,格式字符串,输入表列),14,4. 文件读写,例题,将两变量的数值写入test.txt 。 # include “stdio.h” main() FILE *fp; int i=3; float t=4.5; if (fp=fopen(“test.txt”, “w”) = = NULL) printf (
7、“file open failed”); exit(0); fprintf(fp,”%d, %6.2f”,i, t ); fclose (fp); ,运行结果: test.txt 的内容是 3,4.50,15,5. 文件定位,文件中有一个位置指针,指向当前读写的位置。我们可以使用有关函数来改变其位置。,rewind函数 rewind函数的作用是使位置指针重新返回文件的开头。此函数没有返回值。 例如 :有一个磁盘文件,第一次使它显示在屏幕上,第二次把它复制到另一文件上。程序见下页。,16,5. 文件定位,#include “stdio.h” main() FILE *fp1,*fp2; fp1=
8、fopen(“file1.c”,”r”); fp2=fopen(“file2.c”,”w”); while(!feof(fp1) putchar(getc(fp1); r ewind(fp1); while(!feof(p1) putc(getc(fp1),fp2); fclose(fp1);fclose(fp2); ,17,5. 文件定位,fseek函数和随机读写,对流式文件可以进行顺序读写,也可以进行随机读写。关键在于控制文件的位置指针,如果位置指针是按字节位置顺序移动的,就是顺序读写。如果可以将位置指针按需要移动到任意位置,就可以实现随机读写。所谓随机读写,是指读写完上一个字符(字节)后
9、,并不一定要读写其后续的字符(字节),而可以读写文件中任意所需的字符(字节)。 fseek函数的调用形式为 fseek (文件类型指针,位移量,起始点) “起始点”用0、1或2代替,0代表“文件开始”,1为“当前位置”,2为“文件末尾”。,18,5. 文件定位,fseek函数和随机读写,*位移量一般被要求是long型数据,这样当文件的长度大于64K时不致出问题。另外,此函数一般用于二进制文件,因为文本文件要发生字符转换,计算位置时往往会发生问题。 例如: fseek(fp,100L,0); fseek(fp,60L,1); fseek(fp,-10L,2); 利用fseek函数就可以实现随机读
10、写了。,19,5. 文件定位,例 :在磁盘文件上存有10个学生的数据。要求将第1、3、5、7、9个学生数据输入计算机,并在屏幕上显示出来。 #include”stdio.h” struct student_type char name10; int num; int age; char sex; stud10;,main() int i; FILE *fp; if(fp=fopen(“stud_dat”,”rb”)=NULL) printf(“cannot open filen”); exit(0); for(i=0;i10;i+=2) fseek(fp,I*sizeof(struct stu
11、dent_type),0); fread( ,20,5. 文件定位,ftell函数,ftell函数的作用是得到流式文件中的当前位置,用相对于文件开头的位移量来表示。 由于文件中的位置指针经常移动,人们往往不容易辨清其当前位置。用ftell函数可以得到当前位置,如果ftell函数返回值为-1L,表示出错。例如: i=ftell(fp); if(i=-1L) printf(“errorn”); 变量i存放当前位置,如调用函数出错(如不存在此文件),则输出“error”.,21,6. 出错的检测,ferror函数,在调用各种输入输出函数时,如果出现错误,除了函数返回值有所反映外,还可以用ferror
12、函数检查。它的一般调用形式为 ferror(fp); 如果ferror返回值为0(假),表示未出错。如果返回一个非零值,表示出错。应该注意,对同一个文件每一次调用输入输出函数,均产生一个新的ferror函数值,因此,应当在调用一个输入输出函数后立即检查 ferror函数的值,否则信息会丢失。 在执行fopen函数时,ferror函数的初始值自动置为0。,22,6. 出错的检测,clearerr函数,它的作用是使文件错误标志和文件结束标志置为0。假设在调用一个输入输出函数时出现错误,ferror函数值为一个非零值。在调用clearerr(fp)后,ferror(fp)的值变为0。 只要出现错误标
13、志,就一直保留,直到对同一文件调用clearerr函数或rewind函数,或任何其它一个输入输出函数。,23,7. 文件输入输出小结,常用的缓冲文件系统函数列表如下: 分类 函数名 功 能 打开文件 fopen() 打开文件 关闭文件 fclose() 关闭文件 fseek() 改变文件位置指针位置 文件定位 rewind() 使文件位置指针重新置于文件开头 ftell() 返回文件位置指针的当前值 文件读写 fgetc(),getc() 从指定文件取得一个字符 fputc(),putc() 把字符输出到指定文件,24,7. 文件输入输出小结,文件读写 fgets() 从指定文件读取字符串 fputs() 把字符串输出到指定文件 getw() 从指定文件读取一个字(in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026四川德阳丰能企业管理服务有限责任公司招聘2人备考题库含答案详解(a卷)
- 2026广东江门公用事业集团有限公司招聘6人备考题库带答案详解
- 2026北京中医药大学孙思邈医院招聘19人备考题库含答案详解(黄金题型)
- 2026洋浦国际投资咨询有限公司招聘备考题库(含答案详解)
- 2026浙江杭州市三墩中学招聘出纳(非事业)1人备考题库参考答案详解
- 2025-2026学年动漫设计课程与教学反思
- 2025-2026学年伞的拼音游戏教学设计
- Unit 7 Waiting for Another Weekend教学设计小学英语五年级下册新世纪版
- 2025-2026学年声母训练教案
- Chapter5 Signs we see教学设计小学英语2A香港朗文版
- 计算机系统结构曹强习题答案
- 安全工程毕业论文
- 第5课《大自然的语言》课件++2023-2024学年统编版八年级语文下册
- 有创血压测量操作评分标准
- 数据排序课件浙教版高中信息技术选修1
- 对外投资合作国别(地区)指南 -印度尼西亚-20230619-00348
- 《公共政策学-政策分析的理论方法和技术》重点解析讲述
- python课件第三章基本数据类型:数字类型及math库的应用
- GB/T 5782-2016六角头螺栓
- GB/T 5023.5-2008额定电压450/750 V及以下聚氯乙烯绝缘电缆第5部分:软电缆(软线)
- GB/T 34940.2-2017静态切换系统(STS)第2部分:电磁兼容性(EMC)要求
评论
0/150
提交评论