您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > c语言基础ppt第9章
1/44第9章数据的永久性存储C语言程序设计•数据的永久性存储•文件的组织方式•文件的操作2/44存储设备内部存储设备外部部存储设备3/44•1数据的永久性存储文件是永久性存储设备的最基本存储单位。文件能够大量的、永久性的保存数据信息,并能够通过各种文件操作功能来管理和使用这些数据。文件概念:文件是指存储在永久性存储设备上的具有名字(文件名)的一组相关数据的集合,通常也被称为磁盘文件。4/44•2文件的组织方式根据编码方式,文件可以分为两种:一种是文本文件(ASCII码文件),另一种是二进制文件。00000000,00000011,00010000,0110100000000000,00000011,00010000,0110100000110010001100000011000000111000整数200808(4字节)内存中存放形式二进制文件形式(4字节)‘2’(50)‘0’(48)‘0’(48)‘8’(56)文本(ASCII码)文件形式(6字节)字符转换直接存放0011000000111000‘0’(48)‘8’(56)通过C语言编程实现对文件的访问时,必须要严格按照文件原有的编码方式及文件存储格式来对文件进行访问操作,才能正确读写文件数据。5/44•3文件的操作文件操作主要包括读文件和写文件等。读文件是指从文件中把数据信息读入内存中,以供程序调用;写文件是指把内存中的数据信息输出到永久性存储设备上的文件中,起到保存数据和实现数据共享的功能。磁盘程序数据区输出文件缓冲区输入文件缓冲区写出写出读入读入6/44头文件stdio.h定义了文件结构体类型FILE,用来保存文件的文件名、文件的状态和文件当前的读写位置等相关文件信息。•3.1stdio.htypedefstruct{shortlevel;/*缓冲区‘满’或‘空’的程度*/unsignedflags;/*文件状态标志*/charfd;/*文件描述符*/unsignedcharhold;/*如无缓冲区不读字符*/shortbsize;/*缓冲区的大小*/unsignedchar*buffer;/*数据缓冲区的位置*/unsignedchar*curp;/*文件内位置指针当前的指向*/unsignedistemp;/*临时文件指示器*/shorttoken;/*用于有效性检查*/}FILE;7/44C语言的文件操作编程时,用FILE来定义一个文件结构体类型指针变量(通常称为文件指针),用来指向被访问的文件并通过该文件指针变量来访问文件信息。文件指针定义形式:•3.1stdio.h上面的C程序语句定义了一个文件指针fp,但fp指向哪个文件,目前并不知道,只有通过文件打开函数让fp指向某个指定文件,将fp与该文件关联起来,才能使用fp。FILE*fp;/*定义文件结构体类型指针变量*/8/44C语言是以文件流的形式来对文件进行访问操作的。为了便于对文件流的顺序访问和随机定位访问,在文件内部还有一个位置指针来指向文件的当前读写操作位置,这就是文件结构体FILE中的成员指针变量curp。•3.1stdio.h文件流SEEK_SET文件头位置SEEK_END文件尾位置SEEK_CUR当前读写位置文件指针文件内部读写位置指针curp9/44stdio.h中关于文件的宏定义:•3.1stdio.h#defineSEEK_SET0/*表征文件头位置*/#defineSEEK_CUR1/*表征文件位置指针当前所处位置*/#defineSEEK_END2/*表征文件尾位置*/#defineEOF-1/*文件结束标识宏常量*/10/44•3.1stdio.h函数名功能说明函数名功能说明fopen()打开文件流fscanf()从文件流中按格式读取数据fclose()关闭文件流fprintf()把数据按格式输出到文件流feof()文件结束标识测试fread()从文件流中读取指定大小的数据块ferror()文件访问错误测试fwrite()向文件流中写入指定大小的数据块fgetc()从文件流中读取(输入)一个字符rewind()文件内部读写位置指针复位到文件头fputc()写入(输出)一个字符到文件流中fseek()文件内部读写位置指针置为特定位置fgets()从文件流中读一行或指定长度字符串ftell()返回文件内部读写位置指针当前位置fputs()写字符串到文件流中stdio.h中关于文件的常用函数11/44•3.2文件的打开与关闭(1)文件打开函数fopen()原型:FILE*fopen(constchar*filename,constchar*mode);头文件:#includestdio.h功能:以指定方式打开所指定的文件参数:filename—文件路径加文件名,mode—文件打开方式返回值:若打开文件成功,则返回文件指针值;否则,返回NULL12/44•3.2文件的打开与关闭(2)文件关闭函数fclose()原型:intfclose(FILE*stream);头文件:#includestdio.h功能:关闭文件参数:stream—文件指针返回值:若关闭文件成功,则返回0;否则,返回EOF13/44•3.2文件的打开与关闭文本文件二进制文件rrbwwbaabr+rb+或r+bw+wb+或w+ba+ab+或a+b只读(输入/文件必须已存在)只写(输出)只追加可读/追加可读/写可读/写(文件必须已存在)关于文件的打开方式:打开方式14/44#includestdio.h#includestdlib.hvoidmain(){FILE*fp;intnclose;fp=fopen(d:\\c\\1.c,r);/*以只读方式打开文件*/if(NULL==fp){printf(openfileerror\n);exit(-1);}//此处可放置若干文件操作代码nclose=fclose(fp);/*如果关闭成功返回0,否则返回EOF*/if(EOF==nclose){printf(filecloseerror\n);}}15/443.3文件读/写函数及与读写相关的函数文件结束标识测试函数feof()文件操作错误测试函数ferror()字符读/写函数fgetc()和fputc()字符串读/写函数fgets()和fputs()格式化读/写函数fscanf()和fprintf()数据块读/写函数fread()和fwrite()16/443.3文件读/写函数及与读写相关的函数原型:intfeof(FILE*stream);头文件:#includestdio.h功能:文件结束标识符测试参数:stream—文件指针返回值:若文件内部读写位置指针正指向文件尾,则返回非0值;否则,返回0值if(!feof(fp))/*如果没有遇到文件尾则执行操作*/{……/*文件读写操作代码*/}文件结束标识测试函数feof()17/443.3文件读/写函数及与读写相关的函数文件操作错误测试函数ferror()原型:intferror(FILE*stream);头文件:#includestdio.h功能:文件操作错误测试参数:stream—文件指针返回值:若出现错误,则返回非0值;否则,返回0值if(ferror(fp))/*如果文件读或写出错*/{……/*文件读写错误处理程序代码*/}18/44#includestdio.h#includestdlib.hintmain(void){FILE*fp;if((fp=fopen(gcy1.txt,r))==NULL){printf(Cannotopenfile.\n);exit(1);}putc('C',fp);if(ferror(fp)){printf(FileError\n);exit(1);}fclose(fp);}19/443.3文件读/写函数及与读写相关的函数字符读/写函数fgetc()和fputc()原型:intfgetc(FILE*stream);头文件:#includestdio.h功能:从文件中读入一个字符参数:stream—文件指针返回值:成功执行则返回所读取字符(字节)的整数值;否则,返回EOFch=fgetc(fp);/*从fp所指向的文件流读取一个字符,并赋给字符变量ch*/20/44例1编程实现把文件1.c显示在屏幕上。3.3文件读/写函数及与读写相关的函数#includestdio.h#includestdlib.hvoidmain(){FILE*fp;intnclose;fp=fopen(d:\\c\\1.c,r);/*以只读方式打开文件*/if(NULL==fp){printf(openfileerror\n);exit(-1);}//此处可放置若干文件操作代码while(!feof(fp)){putchar(fgetc(fp));}printf(\n\n显示完毕\n);nclose=fclose(fp);/*如果关闭成功返回0,否则返回EOF*/if(EOF==nclose){printf(filecloseerror\n);}}21/443.3文件读/写函数及与读写相关的函数字符读/写函数fgetc()和fputc()原型:intfputc(intch,FILE*stream);头文件:#includestdio.h功能:把字符ch写入到文件中参数:ch—字符,stream—文件指针返回值:成功执行则返回所写入字符的整数值;否则,返回EOFfputc(ch,fp);/*把字符ch写入到文件中*/22/443.3文件读/写函数及与读写相关的函数例2编程实现把文件1.c另存为新文件1_new.c。#includestdio.h#includestdlib.hvoidmain(void){FILE*fp,*fpNew;intnCh,nResult;fp=fopen(d:\\c\\1.c,r);/*以只读方式打开文件1.c*/if(NULL==fp){printf(Openfile1.cerror\n);exit(-1);}23/44fpNew=fopen(1_new.c,w);/*创建1_new.c并以只写方式打开*/if(NULL==fpNew){printf(Createfile1_new.cerror\n);exit(-1);}while(!feof(fp))/*未遇到文件尾时循环读写操作*/{nCh=fgetc(fp);/*从文件1.c读取字符*/if(EOF!=nCh){nResult=fputc(nCh,fpNew);/*把字符写到文件1_new.c中*/if(EOF==nResult){printf(Writecharacterto1_new.cerror\n);exit(-1);}putchar(nCh);}}fclose(fp);fclose(fpNew);printf(\nFilesaveassuccessfully!\n);}24/443.3文件读/写函数及与读写相关的函数字符串读/写函数fgets()和fputs()原型:char*fgets(char*s,intn,FILE*stream);头文件:#includestdio.h功能:从文件中读入一个长度为n-1的字符串参数:s—字符串,n—要读入的字符串总长度(空字符计算在内),stream—文件指针返回值:返回字符指针s的值25/443.3文件读/写函数及与读写相关的函数字符串读/写函数fgets()和fputs()原型:intfputs(char*s,FILE*stream);头文件:#includestdio.h功能:把字符串s写入到文件中参数:s—字符串,stream—文件指针返回值:成功执行则返回一个非负整数值;否则,返回EOF26/443.3文件读/写函数及与读写相关的函数例2把从键盘输入的一个字符串写到文件gcy1.txt中,再从文件中把该字符串读出来显示到屏幕上。#incl
本文标题:c语言基础ppt第9章
链接地址:https://www.777doc.com/doc-3203195 .html