版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,第9章 文件系统,2,本章学习内容,文件的基本知识 C语言中文件的使用方法 文件的打开/关闭 文件的读/写 文件指针的定位 文件出错的检测,3,本章学习目标,掌握文件的基本知识 掌握文件类型指针的使用方法 掌握文件打开/关闭的方法 掌握文件读/写的一般方法 了解文件定位 了解文件出错检测方法,4,1. 文件的基本知识,next part,基本概念: 文件、流 文件的分类,go,go,5,基本概念: 文件、流,return,(1) 文件 (2) 流,如果文件中的数据是以字节为单位顺序组织的,则把这类文件称为流式文件,简称流。,6,文件的分类,return,对于流式文件,按照数据的存储形式分:
2、 (1) 文本文件: 每个字符占一个字节,以ASC码存储 (2) 二进制文件: 数据按其在内存中的存储形式原样存放到文件中,图示说明,return,例: int型数 10000,特点: 便于对字符操作;存储量大、速度慢,特点: 存储量小、速度快、便于存放中间结果,8,2. C语言中文件的使用方法,next part,C语言中借助文件类型指针和一组标准库函数来实现对文件的操作。,(1) 文件类型FILE (2) 文件类型指针 (3) 说明,go,go,go,9,(1) 文件类型FILE,return, 缓冲文件系统为每个正使用的文件在内存开辟文件信息区 文件信息用系统定义的FILE类型的结构体变
3、量描述 FILE定义在stdio.h中,结构体类型FILE的定义,typedef struct shortlevel; unsigned flags; charfd; unsigned char hold; shortbsize; unsigned char *buffer; unsigned char *curp; unsignedistemp; shorttoken; FILE;,return,/* fill/empty level of buffer */ /* 文件状态标志 */ /* 文件描述符 */ /* Ungetc char if no buffer */ /* 缓冲区大小 *
4、/ /* 数据传输缓冲区 */ /* 当前激活指针 */ /* 临时文件指示器 */ /* 用于合法性校合 */,11,(2) 文件类型指针,return,c语言中通过定义文件类型指针来操作文件。具体过程如下: 定义文件类型指针 FILE *fp; 按指定方式打开文件,使fp和文件建立关联 通过fp对文件进行读写等操作 关闭文件,断开fp和文件的关联,12,(3) 说明,return,C程序在启动时会自动创建三个文件指针,并使之与标准设备文件建立关联: 文件指针stdin 与标准输入设备(键盘)关联 文件指针stdout 与标准输出设备(显示器)关联 文件指针stderr 与标准输出设备(显示
5、器)关联,13,3. 文件的操作,next part,打开/关闭 读/写 定位 错误检测,go,go,go,go,14,return,打开/关闭,(1) fopen() (2) fclose(),函数原型,函数原型,实例,关闭fp所指向的文件; 若有错,返回非0; 否则返回0,return,FILE *fopen( const char *filename, const char *mode );,(1) fopen(),以参数mode指定的方式打开参数filename指定的文件。 若成功,返回一个文件指针,指向该文件;否则,返回NULL(即0),文件打开方式,(2) fclose(),int
6、 fclose( FILE *fp );,调用时,实际参数可以是: 字符串常量、字符数组名、字符指针,return,P293: 表9-1,return,#include int main() FILE *fp; fp = fopen(roll.xls,w); fclose(fp); return 0; ,if(fp=NULL) printf(cannot open roll.xlsn); exit(0); ,#include ,18,return,读/写,(1) fgetc()、fputc() (2) fgets()、fputs() (3) fscanf()、fprintf() (4) fre
7、ad()、fwrite() (5) feof(),go,go,go,go,go,return, fgetc(),int fgetc( FILE *fp );,int fputc( char ch, FILE *fp );,从fp指向的文件中读取一个字符。 若读取成功,则返回读入的字符的ASC码; 否则,返回EOF(即-1),将参数ch中的字符输出到fp指向的文件。 若成功,则返回该字符的ASC码; 否则返回EOF(即-1), fputc(),实例,return,fgetc()和fputc()使用实例:,例1: 从键盘输入字符存到文件a.txt中, 直到输入#为止 例2: 把文件a.txt的内容
8、显示到屏幕上 例3: 把文件a.txt的内容拷贝到文件b.txt中,go,go,go,return,例1: 从键盘输入字符存到文件a.txt中, 直到输入#为止,#include #include int main() FILE *fp; char ch; if(fp = fopen(a.txt,w)=NULL) printf(cannot open filen); exit(0); 从键盘输入字符并存入文件a.txt fclose(fp); return 0; ,return,例2: 把文件a.txt的内容显示到屏幕上,#include #include int main() FILE *f
9、p; char ch; if(fp=fopen(a.txt,r)=NULL) printf(cannot open filen); exit(0); 从文件a.txt中读入内容并显示在屏幕上 fclose(fp); return 0; ,ch = fgetc(fp) ch!=EOF,return,例3: 把文件a.txt的内容拷贝到文件b.txt中,#include #include int main() FILE *in, *out; if (in = fopen(a.txt, r)= NULL) printf(Cannot open a.txt.n); exit(0); if (out =
10、 fopen(b.txt, w)= NULL) printf(Cannot open b.txt.n); exit(0); 把文件a.txt拷贝到b.txt fclose(in); fclose(out); return 0; ,return, fgets(), fputs(),char *fgets( char *buf, int n, FILE *fp );,int fputs( char *str, FILE *fp );,从fp指向的文件读取长度不超过n-1的字符串,存入buf指向的空间 若成功,则返回buf; 否则,返回NULL,将str指向的字符串输出到fp指向的文件。 若成功,返
11、回0; 否则返回非零,实参可以是: 字符数组名、字符指针,实参可以是: 字符串常量、字符数组名、字符指针,return, fscanf(), fprintf(),int fscanf( FILE *fp, char *format, arg_list);,int fprintf( FILE *fp, char *format, arg_list );,从fp指向的文件中按format指定的格式读入数据给arg_list。 若读取成功,返回已输入的数据个数; 否则,返回0,按format指定的格式把arg_list的数据输出到fp指向的文件。 若成功,返回输出数据的个数; 否则返回负数,实例,r
12、eturn,例1: 把数据写入文件grade.txt 例2: 从grade.txt中把数据读出来,并在屏幕上显示,go,go,fscanf()和fprintf()使用实例:,#include #include int main() FILE *fp; char name=Mike; float score=90; if(fp = fopen(grade.txt,w)=NULL) printf(cannot open grade.txtn); exit(0); fprintf(fp,%st%sn,姓名,分数); fprintf(fp,%st%5.0fn,name,score); fclose(f
13、p); return 0; ,return,return,#include #include int main() FILE *fp; char name10; float score; if( (fp=fopen(grade.txt,r) = NULL) printf(cannot open grade.txtn); exit(0); fscanf(fp,%*s%*s); fscanf(fp,%s%f,name, ,return, fread(), fwrite(),size_t fread( void *pt, size_t size, size_t n, FILE *fp );,size
14、_t fwrite( void *pt, size_t size, size_t n, FILE *fp );,从fp指向的文件中读取size*n的数据项,存入pt指向的内存区 若读取成功,返回所读数据项个数; 否则,返回-1,将pt指向的连续n*size个字节的数据写入fp指向的文件 返回写入文件中实际数据项的个数; 否则,返回-1,实例,说明: fread和fwrite函数一般用于二进制文件的输入输出!,return,float score5; FILE *fp; fp=fopen(aa.dat,rb); fread( score, sizeof(float), 5, fp );,stru
15、ct student int num; char name20; char sex; int age; float score3; struct student stu10; for(i=0;i10;i+) fwrite(,等价!,31,数据块I/O: fwrite() 和 fread(),fwrite() 调用形式: fwrite(buffer,size,count,fp); 功能: 把buffer的数据写到fp指向的文件中 fread() 调用形式: fread(buffer,size,count,fp); 功能: 从fp指向的文件中读入数据到buffer,size: 每个数据项占用的字节
16、数 count: 数据项的个数,return,说明: fread和fwrite函数一般用于二进制文件的输入输出!,return,(5) feof(),int feof( FILE *fp );,检查fp指向的文件是否结束。 若文件结束则返回非0值; 否则,返回0,33,return,定位,(1) rewind() (2) fseek() (3) ftell(),go,go,go,说明: 在FILE中有一个数据成员为位置指针,指向当前读写位置,return,(1) rewind(),void rewind( FILE *fp );,将fp指示的文件中的位置指针置于文件开头位置,实例,#inclu
17、de #include int main() FILE *fp; fp = fopen(a.txt,r); if(fp=NULL) printf(cannot open a.txtn); exit(0); while(!feof(fp) putchar(fgetc(fp); rewind(fp); while(!feof(fp) putchar(fgetc(fp); fclose(fp); return 0; ,return,return,(2) fseek(),int fseek( FILE *fp, long offset, int base );,将fp指示的文件中的位置指针移到以bas
18、e所给出的位置为基准、以offset为位移量的位置 若成功返回当前位置; 否则, 返回-1,SEEK_SET 或 0 SEEK_CUR 或 1 SEEK_END 或 2, fseek(fp,100L,SEEK_SET); fseek(fp,0L,SEEK_END);,把文件指针移到距离文件头100个字节处,表示: 把文件指针移到文件末尾,return,(3) ftell(),long ftell( FILE *fp );,返回fp所指向的文件的位置指针的当前值,实例,return,例: 求文件的长度,#include #include int main() FILE *fp; int length; if(fp = fopen(aa.txt,r)=NULL) printf(cannot open roll.xlsn); exit(0); fseek(fp,0L,SEEK_END); length = ftell(fp); printf(length of file is %dn,length); fclose(fp); return 0; ,39,return,错误检测,(1) ferror() (
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年内蒙古自治区包头市高三第五次模拟考试历史试卷含解析
- 2026年高端珠宝首饰设计创新报告
- 循证康复实践中的康复-演进创新
- 循证康复实践中的康复-就业支持
- 循证医学在康复亚专科的应用
- 康复评估的循证标准化建设
- 康复评估的循证多模态数据融合
- 2026年新能源车市场前景创新报告
- 应激性心肌病快速心律失常紧急处理方案
- 2025智能仓储物流机器人研发中心项目经济效益可行性研究报告
- 一年级-民族团结教育主题班会
- 三好三维构造识图题库
- 2023年浙江杭州萧山区检察院招考聘用司法雇员11人笔试参考题库+答案解析
- 宜昌诚信工贸有限责任公司孙家墩磷矿采矿权出让收益评估报告
- 湖北省建筑工程施工统一用表(2023年版全套)
- MT/T 154.8-1996煤矿辅助运输设备型号编制方法
- GB/T 4957-2003非磁性基体金属上非导电覆盖层覆盖层厚度测量涡流法
- GB/T 3934-2003普通螺纹量规技术条件
- 主题班会-纪念长征胜利80周年-图文
- 清创缝合【急诊外科】课件
- 区域市场销售规划方案课件
评论
0/150
提交评论