C13文件.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

高级语言程序设计本章要点文件的基本概念文件的基本函数文件的顺序读写文件的随机读写文件简单应用本章内容13.1C文件概述13.2文件类型指针13.3文件的打开和关闭13.4文件的读写13.5文件的定位13.6出错的检测13.7文件输入输出小结13.1C文件概述文件:存储在外部介质上数据的集合,是操作系统数据管理的单位。使用数据文件的目的1.数据文件的改动不引起程序的改动——程序与数据分离2.不同程序可以访问同一数据文件中的数据——数据共享3.能长期保存程序运行的中间数据或结果数据文件分类按文件的逻辑结构:•记录文件:由具有一定结构的记录组成(定长和不定长)•流式文件:由一个个字符(字节)数据顺序组成按存储介质:•普通文件:存储介质文件(磁盘、磁带等)•设备文件:非存储介质(键盘、显示器、打印机等)按数据的组织形式:•文本文件:ASCII文件,每个字节存放一个字符的ASCII码•二进制文件:数据按其在内存中的存储形式原样存放文本文件与二进制文件如int型数100000010011100010000内存存储形式0010011100010000二进制形式0011000100110000001100000011000000110000ASCII形式文本文件特点:存储量大、速度慢、便于对字符操作二进制文件特点:存储量小、速度快、便于存放中间结果文件处理方法缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区。非缓冲文件系统:低级文件系统,由用户在程序中为每个文件设定缓冲区。磁盘文件输出文件缓冲区输入文件缓冲区程序数据区a缓冲文件系统:缓冲区指令区程序用户数据区磁盘非缓冲文件系统:13.2文件类型指针文件结构体FILE缓冲文件系统为每个正使用的文件在内存开辟文件信息区文件信息用系统定义的名为FILE的结构体描述FILE定义在stdio.h中TurboC在stdio.h文件中有以下的文件类型声明:typedefstruct{shortlevel;/*缓冲区“满”或“空”的程度*/unsignedflags;/*文件状态标志*/charfd;/*文件描述符*/unsignedcharhold;/*如无缓冲区不读取字符*/shortbsize;/*缓冲区的大小*/unsignedchar*buffer;/*数据缓冲区的位置*/unsignedchar*curp;/*指针,当前的指向*/unsignedistemp;/*临时文件,指示器*/shorttoken;/*用于有效性检查*/}FILE;文件类型指针指针变量说明:FILE*fp;用法:•文件打开时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得文件信息,访问文件•文件关闭后,它的文件结构体被释放文件名文件使用方式文件类型指针C程序操作系统磁盘13.3文件的打开与关闭C文件操作用库函数实现,包含在stdio.h文件使用方式:打开文件--文件读/写--关闭文件系统自动打开和关闭三个标准文件:标准输入------键盘stdin标准输出------显示器stdout标准出错输出-----显示器stderr打开文件fopen函数原型:FILE*fopen(char*name,char*mode)功能:按指定方式打开文件返值:正常打开,为指向文件结构体的指针;打开失败,为NULL要打开的文件名使用文件方式文件打开方式文件使用方式含义r(只读)为输入打开一个文本文件w(只写)为输出打开一个文本文件a(追加)向文本文件尾增加数据rb(只读)为输入打开一个二进制文件wb(只写)为输出打开一个二进制文件ab(追加)向二进制文件尾增加数据r+(读写)为读/写打开一个文本文件w+(读写)为读/写建立一个新的文本文件a+(读写)为读/写打开一个文本文件rb+(读写)为读/写打开一个二进制文件wb+(读写)为读/写建立一个新的二进制文件ab+(读写)为读/写打开一个二进制文件文件打开举例例文件打开的常用方法FILE*fp;if((fp=fopen(file1,r))==NULL){printf(“Fileopenerror!\n”);exit(0);}FILE*fp;fp=fopen(a1,r);文件关闭fclose作用:使文件指针变量与文件“脱钩”,释放文件结构体和文件指针函数原型:intfclose(FILE*fp)•功能:关闭fp指向的文件•返值:正常关闭为0;出错时,返回EOF(-1)文件打开时返回的文件类型指针磁盘文件输出文件缓冲区输入文件缓冲区程序数据区a缓冲文件系统:fclose不关闭文件可能会丢失数据13.4文件的读写字符读写函数:fputc与fgetcfputc•函数原型:intfputc(intc,FILE*fp)•功能:把一字节代码c写入fp指向的文件中•返值:正常,返回c;出错,为EOFfgetc•函数原型:intfgetc(FILE*fp)•功能:从fp指向的文件中读取一字节代码•返值:正常,返回读到的代码值;读到文件尾或出错,为EOFch=fgetc(fp);while(ch!=EOF){putchar(ch);ch=fgetc(fp);}#defineputchar(c)fputc(c,stdout)#includestdlib.h#includestdio.hvoidmain(){FILE*fp;charch,filename[10];scanf(%s,filename);if((fp=fopen(filename,w))==NULL){printf(cannotopenfile\n);exit(0);}ch=getchar();/*接收执行scanf语句时最后输入的回车符*/ch=getchar();/*接收输入的第一个字符*/while(ch!='#‘){fputc(ch,fp);putchar(ch);ch=getchar();}fclose(fp);}运行情况如下:file1.c(输入磁盘文件名)computerandc#(输入一个字符串)computerandc(输出一个字符串)例13.1从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个“#”为止。例13.2将一个磁盘文件中的信息复制到另一个磁盘文件中。#includestdlib.h#includestdio.hvoidmain(){FILE*in,*out;charch,infile[10],outfile[10];printf(Entertheinfilename:\n);scanf(%s,infile);printf(Entertheoutfilename:\n);scanf(%s,outfile);if((in=fopen(infile,r))==NULL){printf(cannotopeninfile\n);exit(0);}if((out=fopen(outfile,w))==NULL){printf(cannotopenoutfile\n);exit(0);}while(!feof(in))fputc(fgetc(in),out);fclose(in);fclose(out);}运行情况如下:Entertheinfilename:file1.cEntertheoutfilename:file2.c程序运行结果是将file1.c文件中的内容复制到file2.c中去。例13.2的改进:复制一个二进制文件,利用main参数,在输入命令行是将两个文件名输入。#includestdlib.h#includestdio.hvoidmain(intargc,char*argv[]){FILE*in,*out;charch;if(argc!=3){printf(Youforgottoenterafilename\n);exit(0);}if((in=fopen(argv[1],rb))==NULL){printf(cannotopeninfile\n);exit(0);}if((out=fopen(argv[2],wb))==NULL){printf(cannotopenoutfile\n);exit(0);}while(!feof(in))fputc(fgetc(in),out);fclose(in);fclose(out);}数据块的读写函数调用:fread(buffer,size,count,fp);fwrite(buffer,size,count,fp);参数说明:buffer:是一个指针。对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址(均指起始地址)。size:要读写的字节数。count:要进行读写多少个size字节的数据项。fp:文件型指针。使用举例若有如下结构类型:structstudent_type{charname[10];intnum;intage;charaddr[30];}stud[40];可以用fread和fwrite来进行数据的操作:for(i=0;i40;i++)fread(&stud[i],sizeof(structstudent-type),1,fp);for(i=0;i40;i++)fwrite(&stud[i],sizeof(structstudent-type),1,fp);文件函数分类函数名功能打开文件fopen()打开文件关闭文件fclose()关闭文件文件定位fseek()改变文件位置指针的位置rewind()使文件位置指针重新至于文件开头ftell()返回文件位置指针的当前值文件状态feof()若到文件末尾,函数值为真ferror()若对文件操作出错,函数值为真clearerr()使ferror和feof()函数值置零文件函数分类函数名功能文件fgetc(),getc()从指定文件取得一个字符读写fputc(),putc()把字符输出到指定文件fgets()从指定文件读取字符串fputs()把字符串输出到指定文件getw()从指定文件读取一个字(int型)putw()把一个字输出到指定文件fread()从指定文件中读取数据项fwrite()把数据项写到指定文件中fscanf()从指定文件按格式输入数据fprintf()按指定格式将数据写到指定文件中作业13.6、13.10

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功