《C语言程序设计教程(第二版)》-徐新华-电子教案 第12章 文件

上传人:E**** 文档编号:89400530 上传时间:2019-05-24 格式:PPT 页数:50 大小:286KB
返回 下载 相关 举报
《C语言程序设计教程(第二版)》-徐新华-电子教案 第12章 文件_第1页
第1页 / 共50页
《C语言程序设计教程(第二版)》-徐新华-电子教案 第12章 文件_第2页
第2页 / 共50页
《C语言程序设计教程(第二版)》-徐新华-电子教案 第12章 文件_第3页
第3页 / 共50页
《C语言程序设计教程(第二版)》-徐新华-电子教案 第12章 文件_第4页
第4页 / 共50页
《C语言程序设计教程(第二版)》-徐新华-电子教案 第12章 文件_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《《C语言程序设计教程(第二版)》-徐新华-电子教案 第12章 文件》由会员分享,可在线阅读,更多相关《《C语言程序设计教程(第二版)》-徐新华-电子教案 第12章 文件(50页珍藏版)》请在金锄头文库上搜索。

1、2019/5/24,1,第12章 文 件,在程序运行时,程序本身和数据一般都存放在内存中;运行结束后,数据被释放。 如果需要长期保存程序运行所需的原始数据,或程序运行产生的结果,就必须以文件形式存储到外部存储介质上。 教学目的: 掌握文件的打开、常用读写函数与定位函数; 了解文件关闭、出错检测等函数。,2019/5/24,2,教学内容: 12.1 文件概述 12.2* 文件的打开与关闭 12.3* 文件的读写操作 12.4* 位置指针与文件定位 12.5 出错检测 本章要点 本章作业与上机实践,2019/5/24,3,12.1 文件概述,1文件与文件名 文件是指存放在外部存储介质上的数据集合。

2、 为标识一个文件,每个文件都必须有一个文件名,其一般结构为: 主文件名.扩展名 文件命名规则,遵循操作系统的约定。,文件的内容,文件的类别,2019/5/24,4,2文件分类 (1)根据文件的内容:程序文件 + 数据文件。 (2)根据文件的组织形式:顺序存取文件 + 随机存取文件。,源文件、目标文件 + 可执行文件,2019/5/24,5,(3)在C语言中,根据存储形式分为: ASCII码文件:逐个字符存储其ASCII码。 1个字节存储1个字符,因而便于对字符进行逐个处理,所以适合存储文本内容。 如果用于存储数值,则一般占用存储空间较多,而且要花费转换时间(ASCII码与二进制之间的转换)。,

3、2019/5/24,6,二进制文件:内存中的数据,原样输出。 用二进制形式存储数值,可以节省存储空间和转换时间;但1个字节并不对应1个字符,不能直接输出字符形式。,2019/5/24,7,例如,整数100: ASCII码形式:每位数字占用1B,共3B。 二进制形式:1个字节就够用,如下图所示:,2019/5/24,8,3读文件与写文件 (1)所谓读文件是指,将磁盘文件中的数据传送到计算机内存的操作: 文件(磁盘) 内存 (2)所谓写文件是指,从计算机内存向磁盘文件中传送数据的操作: 内存 文件(磁盘),2019/5/24,9,4构成文件的基本单元与流式文件 语言将文件看作是,一个字符(ASCI

4、I码文件)或字节(二进制文件)流,如下图所示:,这种文件称为流式文件。,2019/5/24,10,5文件类型FILE 系统给每个打开的文件都在内存中开辟一个区域,用于存放文件的有关信息(如文件名、文件位置等)。 这些信息保存在一个FILE结构类型的变量(由系统定义)中。 返回,必须大写,2019/5/24,11,12.2* 文件的打开与关闭,对文件进行操作之前,必须先打开该文件;使用结束后,应立即关闭,以免数据丢失。 12.2.1* 文件的打开fopen()函数 1用法: FILE * fopen (“文件名“,“操作方式“); 2功能:返回一个指向文件的指针。 3函数原型:stdio.h 。

5、,对文件操作的库函数,函数原型均在该头文件中。,2019/5/24,12,(1)“文件名”是指要打开(或创建)的文件名。 如果使用字符数组(或指针),则无需双引号。 如果文件不在搜索路径下,则必须使用全称。 (2)“操作方式”如下表所示:,带绝对路径,2019/5/24,13,2019/5/24,14,(3)如果打开操作失败,则fopen()函数返回一个空指针NULL (其值在头文件stdio.h中被定义为)。 为增强程序可靠性,常用如下方法打开一个文件: if( ( fp = fopen(“文件名“,“操作方式“) )=NULL) printf(“can not open this file

6、n“); exit(0); ,关闭所有打开的文件,结束程序运行。,2019/5/24,15,12.2.2 文件的关闭fcolse()函数 1用法: int fclose(FILE *文件指针); 2功能:关闭“文件指针”所指向的文件。 3函数返回值:正常关闭,返回值为;否则,返回值为非。 例如,fclose( fp ); /*关闭fp所指向的文件*/ 返回,2019/5/24,16,12.3* 文件的读/写操作,文件打开之后,就可以对它进行读/写操作了。 12.3.1 读写一个字符 12.3.2 读写一个字符串 12.3.3 读写一个数据块 12.3.4 格式化读写 12.3.5 读写函数的选

7、用原则 返回,2019/5/24,17,12.3.1 读写一个字符,1写1个字符到文件中fputc()函数 案例12.1 从键盘上输入一个字符串(以“”作为结束字符),以ASCII码形式存储到一个磁盘文件diskfile.txt中。,2019/5/24,18,#include “stdio.h“ #include “conio.h“ void main( ) FILE *fp; char ch; if ( ( fp = fopen(“diskfile.txt“, “w“) ) = = NULL) printf(“can not open this file, press any key to

8、exit“); getch(); exit(0); /*输入字符,并存储到指定文件中*/ for( ; ( ch = getchar() ) != ; ) fputc( ch, fp ); fclose(fp); Next,必须大写,2019/5/24,19, 库函数fputc() (1)用法:int fputc(字符数据,文件指针); (2)功能:将字符数据写到指定文件中,并将读/写位置指针向前移动1个字节(即指向下一个写入位置)。 (3)返回值: 输出成功,返回输出的字符数据; 输出失败,返回一个符号常量EOF(其值在头文件stdio.h中,被定义为-1)。 返回程序,常量 / 变量,注:

9、所有读写函数均自动调整该 指针,到下一个读写位置。,2019/5/24,20,2从文件中读1个字符fgetc() 和feof()函数 案例12.2 顺序显示案例12.1创建的磁盘文件diskfile.txt。,2019/5/24,21,#include “stdio.h“ #include “conio.h“ void main( ) FILE *fp; char ch; if ( ( fp = fopen(“diskfile.txt“, “r“) ) = = NULL) printf(“can not open source file, press any key to exit“); ge

10、tch(); exit(0); for(; ( ch = fgetc(fp) ) != EOF; ) putchar( ch ); fclose(fp); getch(); Next,2019/5/24,22, 库函数fgetc() (1)用法:int fgetc( 文件指针 ); (2)功能:从指定文件中读1个字符,并将读写位置指针向前移动1个字节。 该函数无出错返回值。 例如:ch = fgetc ( fp ); 返回程序,2019/5/24,23, 符号常量EOF 在对ASCII码文件执行读入操作时,如果遇到文件尾,则返回一个文件结束标志EOF(其值在头文件stdio.h中被定义为-1)

11、。,End Of File,只适用于ASCII码文件,2019/5/24,24, 库函数feof() (1)用法:int feof( 文件指针 ) ; (2)功能:在执行读文件操作时,如果遇到文件尾,则函数返回逻辑真(1);否则,则返回逻辑假(0)。 feof()函数同时适用于ASCII码文件和二进制文件(只能使用该函数,不能使用EOF)。 返回程序,2019/5/24,25,案例12.3 设计一个程序:实现制作任意1个ASCII码文件的副本(文件名由用户任意指定)。 算法设计要点: (1) 制作副本可以有两种方法:一种是使用带参主函数;另一种是在程序运行时,提示用户输入文件名。 本案例采用第

12、一种方法。 (2) 首先校验参数个数,然后依次打开、并校验源文件和目标文件,如果校验均通过,则进行复制操作。,2019/5/24,26,/*使用格式:可执行文件名 源文件名 目标文件名*/ #include “stdio.h“ #include “conio.h“ void main(int argc, char *argv) FILE *input, *output; char ch; if( argc != 3) printf(“参数个数不对n“); printf(“n Usage: 可执行文件名 source-file dest-file“); exit(0); ,源文件指针,目标文件指

13、针,2019/5/24,27,if ( input=fopen(argv1,“r“) )=NULL) /*打开源文件失败*/ printf(“can not open source filen“); exit(0); if (output=fopen(argv2,“w“)=NULL) /*创建目标文件失败*/ printf(“can not create destination filen“); exit(0); /*复制源文件到目标文件中*/ for( ; ( ! feof(input) ) ; ) fputc( fgetc(input), output ); fclose(input);

14、fclose(output); /*关闭文件*/ 返回,2019/5/24,28,12.3.2 读写一个字符串fgets()和fputs(),案例12.4 密码管理程序。要求: (1)密码设置(密码长度612个字符); (2)加密存储到1个ASCII码文件中; (3)登录密码校验。 算法设计要点: (1)密码设置(密码长度612个字符):请参阅案例6.6。,2019/5/24,29,(2)加密存储到1个ASCII码文件:字符串加密,请参阅案例6.4。本案例直接利用fputs()函数,将加密后的密文写入密码文件password.txt。 (3)登录密码校验:首先提示用户输入密码,然后使用同一加密

15、算法对用户输入的密码字符串进行加密,再与密码文件中存储的密文比较。 为突出本案例重点对文件的读写操作,密码设置和密码串加密,留给读者自己设计和实现,本案例对密码字符串进行不加密存储和校验。,2019/5/24,30,#include “stdio.h“ #include “conio.h“ void main( ) FILE *fp; char password13, password213; if ( ( fp = fopen(“password.txt“, “w“) ) = NULL) printf(“n can not open this file, press any key to e

16、xit“); getch(); exit(0); ,2019/5/24,31,/*设置、并存储密码*/ printf(“n Setup a password(6-12 characters): “); gets(password); fputs( password, fp ); fclose(fp); /*重新打开密码文件,读出密码字符串用于登录校验*/ if ( ( fp = fopen(“password.txt“, “r“) ) = NULL) printf(“n can not open this file, press any key to exit“); getch(); exit(0); fgets( password, 13, fp ); fclose(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号