冯毅程序设计基础课件_第1页
冯毅程序设计基础课件_第2页
冯毅程序设计基础课件_第3页
冯毅程序设计基础课件_第4页
冯毅程序设计基础课件_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第十章 文件C 文件概述文件类型指针文件的打开与关闭文件的读写文件的定位Introduction: What is I/O?CentralProcessingUnitMainMemoryMonitorNetworkDisk (Files)Keyboardmouse内存与外设之间的数据传输内存与外设之间的数据传输WriteRead文件文件:存储在外部介质上:存储在外部介质上数据的集合数据的集合, ,是操作系统是操作系统数据管理的单位数据管理的单位,用,用文件名文件名标识标识 使用使用数据文件数据文件的目的的目的n大量数据大量数据的输入的输入/ /输出输出n长期保存长期保存程序运行的中间数据或结果

2、数据程序运行的中间数据或结果数据n数据文件的改动不引起程序的改动数据文件的改动不引起程序的改动程序与数据分离程序与数据分离n不同程序可以访问同一数据文件中的数据不同程序可以访问同一数据文件中的数据数据共享数据共享IntroductionIntroduction文件分类文件分类v按文件的逻辑结构:按文件的逻辑结构:l记录文件记录文件:由具有一定结构的记录组成(定长和不定长):由具有一定结构的记录组成(定长和不定长)l流式文件流式文件:由一个个字符(字节)数据顺序组成:由一个个字符(字节)数据顺序组成v按存储介质:按存储介质:l普通文件普通文件:存储介质文件(磁盘、磁带等):存储介质文件(磁盘、磁

3、带等)l设备文件设备文件:非存储介质(键盘、显示器、打印机等):非存储介质(键盘、显示器、打印机等)v按数据的组织形式:按数据的组织形式:l文本文件文本文件: ASCII文件文件,每个字节存放一个字符的每个字节存放一个字符的ASCII码码l二进制文件二进制文件:数据按其在内存中的存储形式原样存放:数据按其在内存中的存储形式原样存放文本文件特点文本文件特点: :存储量大存储量大、速度慢速度慢、便于对字符操作、便于对字符操作二进制文件特点二进制文件特点: :存储量小存储量小、速度快速度快、便于存放中间结果、便于存放中间结果例例. int型数型数100000010011100010000内存内存存储

4、形式存储形式 0010011100010000二进制二进制形式形式0011000100110000001100000011000000110000ASCII 形式形式10000Introduction文件处理方法文件处理方法v缓冲文件系统缓冲文件系统:高级文件系统,系统:高级文件系统,系统自动自动为正在使用为正在使用的文件开辟的文件开辟内存缓冲区内存缓冲区v非缓冲文件系统非缓冲文件系统:低级文件系统,由用户在程序中为:低级文件系统,由用户在程序中为每个文件设定缓冲区每个文件设定缓冲区Data segmentosout (Write)In(Read)内存内存缓冲文件缓冲文件系统系统out (Wr

5、ite)In(Read)Introduction特点特点: :减少读写次数减少读写次数, ,提高速度和数据管理质量提高速度和数据管理质量文件结构体类型文件结构体类型FILEv 缓冲文件系统缓冲文件系统为每个为每个正使用正使用的文件在内存开辟文件信息区,的文件在内存开辟文件信息区,存放有关存放有关文件文件操作的操作的信息信息v文件信息用系统定义的名为文件信息用系统定义的名为FILE的结构体描述的结构体描述vFILE定义在定义在中中typedef struct int fd; /文件号文件号 unsigned flags; /文件操作方式文件操作方式 int bsize; /缓冲区缓冲区大小大小

6、unsigned char *buffer; /文件缓冲区位置文件缓冲区位置 unsigned char *curp; /文件当前读写位置文件当前读写位置FILE;文件类型指针文件类型指针 typedef struct short level; /* fill/empty level of buffer */ unsigned flags; /* flags */ char fd; /* */ unsigned char hold; /* Ungetc char if no buffer */ short bsize; /* Buffer size */ unsigned char *buff

7、er; /* Data transfer buffer */ unsigned char *curp; /* Current active pointer */ unsigned istemp; /* Temporary */ short token; /* Used for validity checking */ FILE; /* This is the */v文件类型指针变量定义:文件类型指针变量定义: FILE *fp;v用法:用法:l文件打开文件打开时,系统自动建立文件结构体,并把指向它的时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得指针返回来,程序通过这个

8、指针获得文件信息文件信息,访问文件访问文件l文件关闭文件关闭后,它的文件结构体被释放后,它的文件结构体被释放v操作文件前应先定义操作文件前应先定义FILE指针变量指针变量文件名文件名文件使用方式文件使用方式FILE 指针指针C programOperating Systemdisk文件类型指针文件类型指针 &C文件操作用库函数实现,包含在文件操作用库函数实现,包含在stdio.h&文件使用文件使用步骤步骤:打开打开文件文件-文件文件读读/写写-关闭关闭文件文件&系统系统自动自动打开和关闭三个打开和关闭三个标准设备文件标准设备文件l标准输入标准输入-键盘键盘 stdinl

9、标准输出标准输出-显示器显示器 stdoutl标准出错输出标准出错输出-显示器显示器 stderr&其余文件必须实施打开其余文件必须实施打开/关闭操作关闭操作FILE *文件的打开与关闭文件的打开与关闭r rb只读只读,为为输入输入打开一个文本打开一个文本/二进制文件二进制文件;文件不存在文件不存在,打开失败打开失败只写只写,为为输出输出打开或建立一个文本打开或建立一个文本/二进制文件二进制文件;原来文件内容被覆盖原来文件内容被覆盖读写读写,为读为读/写打开一个文本写打开一个文本/二进制文件二进制文件;文件不存在文件不存在,打开失败打开失败读写读写,为读为读/写打开或建立一个文本写打开

10、或建立一个文本/二进制文件二进制文件;原来文件内容被覆盖原来文件内容被覆盖读写读写,为读为读/写打开或建立一个文本写打开或建立一个文本/二进制文件二进制文件;在文件尾在文件尾追加追加数据数据追加追加,打开或建立一个文本打开或建立一个文本/二进制文件二进制文件,并在文件尾并在文件尾追加追加数据数据文件使用方式文件使用方式w wba abr+ rb+w+ wb+a+ ab+文件的打开文件的打开 fopen函数原型:函数原型: FILE *fopen(char *name, char *mode) 功能:功能:按指定方式打开文件按指定方式打开文件返值:返值:正常打开,为指向文件结构体的指针;正常打开

11、,为指向文件结构体的指针; 打开失败,为打开失败,为NULL文件使用方式文件使用方式要打开的文件名要打开的文件名例例 FILE *fp; char *c:fengyibkctest.dat fp= fopen(, r); 例例 FILE *fp; fp= fopen (c:fengyibkctest.dat, r); 例例 FILE *fp; fp=fopen(aa.c, w); if(fp=NULL) printf(“ error!n”); exit(0); v作用作用: :使文件指针变量与文件使文件指针变量与文件“脱钩脱钩”,释放释放文件结文件结构体和文件指针构体和文件指针文件的关闭文件的

12、关闭 fclose函数原型:函数原型: int fclose(FILE *fp)功能:功能:关闭关闭fp指向的文件指向的文件返值:返值:正常关闭,返回正常关闭,返回0; 关闭出错,返回关闭出错,返回EOF文件打开时返回的文件类型指针文件打开时返回的文件类型指针Disk fileOutput buffersInput buffersData segmentaBuffer-不关闭文件可能会不关闭文件可能会丢失数据丢失数据fclose 文件文件 I/O 与与 终端终端 I/O#define putchar( c ) fputc(c,stdout)#define getchar( ) fgetc(st

13、din)#define putc(ch,fp) fputc(ch,fp)#define getc(fp) fgetc(fp)文件读文件读/写写:字符字符I/O fputc与与fgetc函数原型:函数原型: int fputc(int c, FILE *fp) 功能:功能:把字符把字符c写入写入fp指向的文件中指向的文件中返值:返值:正常,返回正常,返回c;出错,返回;出错,返回EOF函数原型:函数原型: int fgetc(FILE *fp) 功能:功能:从从fp指向的文件中指向的文件中读入读入一个字符一个字符返值:返值:正常,返回读到的代码值正常,返回读到的代码值; 读到文件尾或读到文件尾或

14、出错,返回出错,返回EOF字符字符I/O举例举例 fputc与与fgetc例例 从键盘输入字符,逐个从键盘输入字符,逐个 存到磁盘文件中,直到存到磁盘文件中,直到 输入输入#为止为止#include #include void main() FILE *fp; char ch, *=out.txt; if(fp=fopen(,w)=NULL) printf(cannot open filen); exit(0); printf(Please input string:); ch=getchar(); while(ch!=#) fputc(ch,fp); putchar(ch); ch=getc

15、har(); fclose(fp);字符字符I/O举例举例 fputc与与fgetc#include #include void main() FILE *fp; char ch, *=out.txt; if(fp=fopen(,w)=NULL) printf(cannot open filen); exit(0); printf(Please input string:); ch=getchar(); while(ch!=#) fputc(ch,fp); putchar(ch); ch=getchar(); fclose(fp);例例 读文本文件内容,读文本文件内容, 并显示并显示rfget

16、c(fp);EOF)fgetc(fp);fputc(ch, stdout);while( ) putchar(ch);判断判断文本文件文本文件是否结束是否结束( )!=EOFch=fgetc(fp)字符字符I/O举例举例 fputc与与fgetc判断判断二进制文件二进制文件是否结束是否结束while(!feof(fp) c=fgetc(fp); .函数原型:函数原型: int feof(FILE *fp) 功能:功能:判断判断文件文件是否结束是否结束返值:返值:文件结束文件结束,返回,返回真真(非零非零); 文件文件未结束未结束,返回,返回0文件读文件读/写写:字符串字符串I/O fputs与

17、与fgets函数原型:函数原型: int fputs(char *s, FILE *fp) 功能:功能:向向fp指向的文件中指向的文件中写入写入字符串字符串s返值:返值:正常,返回写入的最后一个字符;出错,返回正常,返回写入的最后一个字符;出错,返回EOF函数原型:函数原型: char *fgets(char *s, int n, FILE *fp) 功能:功能:从从fp指向的文件指向的文件读入读入n-1个字符送入个字符送入s指向的内存区指向的内存区, 并在最后加一个并在最后加一个0返值:返值:正常,返回读取字符串首地址正常,返回读取字符串首地址s; 出错或文件尾,返回出错或文件尾,返回NUL

18、L说明:说明:若读入若读入n-1个字符前遇个字符前遇换行符换行符或或文件尾文件尾,即结束即结束字符串字符串I/O fputs与与fgets例例 从键盘读入若从键盘读入若干字符串存入文件干字符串存入文件,直到输入,直到输入空串空串为为止;再从文件读回止;再从文件读回显示显示#include#include #include void main() FILE *fp; char string81; if(fp=fopen(,w)=NULL) printf(cannt open file);exit(0); while( ) fputs(string, fp); fputs(n,fp); fclos

19、e(fp); if(fp=fopen(,r)=NULL) printf(cannt open file);exit(0); while( ) fputs(string, stdout); fclose(fp);strlen( )0gets(string)fgets(string,81,fp)!=NULL文件读文件读/写写:格式化格式化I/O fprintf与与fscanffprintf(fp,%d,%6.2f, i, t); fscanf(fp,%d,%f, &i, &t); 函数原型:函数原型: int fprintf(FILE *fp, %, var, )功能:功能:按指定

20、格式向按指定格式向fp指向的文件中指向的文件中写入写入数据数据返值:返值:正常,返回写入数据个数;出错,返回正常,返回写入数据个数;出错,返回EOF函数原型:函数原型: int fscanf(FILE *fp, %, &var, ) 功能:功能:按指定格式从按指定格式从fp指向的文件指向的文件读入读入数据数据返值:返值:正常,返回读取数据个数;出错或文件尾,返回正常,返回读取数据个数;出错或文件尾,返回EOF const char *format格式字符串格式字符串 格式化格式化I/O fprintf与与fscanf例例 从键盘按格式从键盘按格式输入数据输入数据, ,存到磁存到磁盘文件

21、中去盘文件中去#include #include void main() char s80,c80; int a,b; FILE *fp; if(fp=fopen(test, w)=NULL) puts(cant open file); exit(0) ; fscanf(stdin,%s%d, s, &a); fprintf(fp, %s %d, s, a); fclose(fp); if(fp=fopen(test,r)=NULL) puts(cant open file); exit(0); fscanf(fp,%s%d, c, &b); fprintf(stdout, %

22、s %dn, c, b); fclose(fp);文件读文件读/写写:数据块数据块I/O fwrite与与fread函数原型:函数原型: size_t fread(void *buffer, size_t size, size_t count,FILE *fp) 功能:功能:按指定格式从按指定格式从fp指向的文件中指向的文件中读入读入数据块数据块返值:返值:正常,返回读入数据块数;出错或文件尾,返回正常,返回读入数据块数;出错或文件尾,返回0函数原型:函数原型: size_t fwrite(void *buffer, size_t size, size_t count, FILE *fp)功能

23、:功能:按指定格式向按指定格式向fp指向的文件指向的文件写入写入数据块数据块返值:返值:正常,返回写入数据块数;出错,返回正常,返回写入数据块数;出错,返回0 lbuffer: 指向要输入指向要输入/输出数据块的输出数据块的首地址的指针首地址的指针lsize: 每个要读每个要读/写的写的数据块的大小数据块的大小(字节数)(字节数)lcount: 要读要读/写的写的数据块的个数数据块的个数lfp: 要读要读/写的写的文件指针文件指针lfread与与fwrite 一般用于一般用于二进制文件二进制文件的输入的输入/输出输出typedef unsigned size_t;float f10;FILE

24、*fp;fp=fopen(aa.dat, rb);fread(f,4,10,fp);for(i=0;i10;i+) fread(&fi,4,1,fp);struct student int num; char name20; char sex; int age; float score3;stud10;for(i=0;i10;i+) fread(&studi, sizeof(struct student),1,fp);数据块数据块I/O fwrite与与fread数据块数据块I/O fwrite与与fread例例 从键盘输入从键盘输入4个学生数据,将其转存到磁盘文件中去个学生数

25、据,将其转存到磁盘文件中去#include #define SIZE 4typedef struct student char name10; int num; int age; char addr15;STU; void main() int i; STU studSIZE; for(i=0;iSIZE;i+)scanf(%s%d%d%s,,&studi.num, &studi.age,studi.addr); save(stud); display(stud);void save(STU stud ) FILE *fp; int i; if(fp=fop

26、en(“c:stu_dat,wb)=NULL) printf(cannot open filen); return; for(i=0;iSIZE;i+) if( !=1) printf( errorn); fclose(fp);fwrite(&studi,sizeof(struct student),1,fp)void display(STU *stud) FILE *fp; int i; if(fp=fopen(c:stu_dat,rb)=NULL) printf(cannot open filen); return; for(i=0;iSIZE;i+) fread(&stu

27、di, sizeof(struct student),1,fp); printf(%-10s %4d %4d %-15sn,, studi.num, studi.age, studi.addr); fclose(fp);例例 文件文件 abc.txt 内容如下内容如下:0 1 2 3 4 5 6 7 8 9 A B C D E F1. 执行执行: fp=fopen(abc.txt,r);2. 调用一次:调用一次:fgetc(fp);3. 接着执行:接着执行:fgets(str,11,fp);几个概念几个概念v文件位置指针文件位置指针-指向当前读写位置的指针指向当前读写位置的

28、指针 文件的定位文件的定位几个概念几个概念v文件位置指针文件位置指针-指向当前读写位置的指针指向当前读写位置的指针函数原型:函数原型:void rewind( FILE *fp ) 功能:功能:重置重置fp指向的指向的文件位置指针到文件文件位置指针到文件首首返值:返值:无无 文件的定位文件的定位v文件读写方式文件读写方式l顺序顺序读写读写:位置指针按字节位置顺序移动:位置指针按字节位置顺序移动l随机随机读写读写:位置指针按需要移动到任意位置:位置指针按需要移动到任意位置#include#include #include void main() FILE *fp; char string81;

29、if(fp=fopen(, w )=NULL) printf(cannt open file);exit(0); while(strlen(gets(string)0) fputs(string, fp); fputs(n, fp); fclose(fp); if(fp=fopen(,r)=NULL) printf(cannt open file);exit(0); while(fgets(string,81,fp)!=NULL) fputs(string, stdout); fclose(fp);w+rewind(fp); 文件的定位文件的定位函数原型:函数原型:int fseek(FILE

30、 *fp, long offset, int whence) 功能:功能:改变改变fp指向的指向的文件位置指针文件位置指针的位置的位置返值:返值:正常,返回正常,返回0;出错,返回非零;出错,返回非零函数原型:函数原型: long ftell(FILE *fp) 功能:功能:返回返回fp指向的指向的文件位置指针文件位置指针的当前位置的当前位置 用相对用相对文件文件首首的的位移量位移量表示表示返值:返值:正常,返回正常,返回文件位置指针位置文件位置指针位置;出错,返回;出错,返回-1Lloffset:位移量(以起始点为基点位移量(以起始点为基点, ,移动的字节数移动的字节数) )0 向后移动向后移动0 向前移动向前移动lwhence: 起始点起始点文件文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论