C语言 文件

上传人:油条 文档编号:2656879 上传时间:2017-07-26 格式:PPT 页数:45 大小:482KB
返回 下载 相关 举报
C语言 文件_第1页
第1页 / 共45页
C语言 文件_第2页
第2页 / 共45页
C语言 文件_第3页
第3页 / 共45页
C语言 文件_第4页
第4页 / 共45页
C语言 文件_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《C语言 文件》由会员分享,可在线阅读,更多相关《C语言 文件(45页珍藏版)》请在金锄头文库上搜索。

1、Chap 12 文件,12.1 学生成绩文件统计 12.2 用户信息加密和校验 12.3 文件综合应用:资金账户管理,本章要点,什么是文件?C文件是如何存储的?什么是文件缓冲系统?工作原理如何?什么是文本文件和二进制文件?如何打开、关闭文件?如何编写文件读写程序?如何编写程序,实现文件数据处理?,12.1 学生成绩文件统计,【例12-1】有5位学生的计算机等级考试成绩被事先保存在数据文件C:f12-1.txt(C盘根目录下的文件f12-1.txt,需事先准备好该文件)中,包括学号、姓名和分数,文件内容如下: 301101 Zhangwen 91 301102 Chenhui 85 301103

2、 Wangweidong 76 301104 Zhengwei 69 301105 Guowentao 55请读出文件的所有内容显示到屏幕,并输出平均分。,#include #include int main(void) FILE *fp; /*1.定义文件指针*/ long num; char stname20; int i, score; int avg_score = 0; if(fp=fopen(c:f12-1.txt,r) = NULL)/*2.打开文件*/ printf(File open error!n); exit(0); ,例12-1 源程序,例12-1 源程序,/*3.文件

3、处理(逐个读入和处理数据)*/ for(i=0;i5;i+) /*从文件读入成绩保存到变量*/ fscanf(fp,%ld%s%d,&num,stname,&score); avg_score += score; /*统计总分*/ /*输出成绩到屏幕*/ printf(%ld%s %dn,num,stname,score); /*输出平均分到屏幕*/ printf(Average score: %dn, avg_score/5); if(fclose(fp) /*4.关闭文件*/ printf( Can not close the file!n ); exit(0); return 0;,12

4、.1.2 文件的概念,文件:操作系统中的文件是指驻留在外部介质(如磁盘等)中的一个有序数据集。各种类型的文件程序文件:源文件、目标程序、可执行程序数据文件(输入/输出): 文本文件、图像文件、声音文件、可执行文件等文件的特点: 数据永久保存;数据长度不定;数据按顺序存取,12.1.3 文本文件和二进制文件,语言中的文件是数据流(由一个个的字节数据组成)文件的两种数据形式: ASCII码 (文本文件 text stream)字符流 二进制码(二进制文件 binary stream)二进制流 二进制文件是直接把内存数据以二进制形式保存。例如,整数1234文本文件保存:49 50 51 52 (4个

5、字符)二进制文件保存: 04D2 (1234的二进制数),12.1.4 缓冲文件系统,内存单元 内存单元,数据,缓冲器,512字节,文件,由操作系统自动完成,程序控制,由于磁盘速度慢直接把数据写到磁盘效率很低,12.1.4 缓冲文件系统,向磁盘输出数据:数据 缓冲区,装满缓冲区后 磁盘文件。从磁盘读入数据:先一次性从磁盘文件将一批数据输入到缓冲区,然后再从缓冲区逐个读入数据到变量。,数据,缓冲器,512字节,文件,由操作系统自动完成,程序控制,文件名,内存单元 内存单元,用什么标识,缓冲文件与文件类型指针,用文件指针指示文件缓冲区中具体读写的位置FILE *fp;,fp,同时使用多个文件时,每

6、个文件都有缓冲区,用不同的文件指针分别指示。,1. 文件结构与自定义类型typedef FILE:结构类型, 用 typedef 定义(见stdio.h)typedef struct short level; /* 缓冲区使用量 */ unsigned flags; /* 文件状态标志 */ char fd; /* 文件描述符 */ short bsize; /* 缓冲区大小 */ unsigned char *buffer; /* 文件缓冲区的首地址 */ unsigned char *curp; /* 指向文件缓冲区的工作指针 */ unsigned char hold; /* 其他信息

7、*/ unsigned istemp; short token; FILE;,12.1.5 文件结构与文件类型指针,自定义类型(typedef):将C语言中的已有类型(包括已定义过的自定义类型)重新命名新的名称可以代替已有数据类型常用于简化对复杂数据类型定义的描述typedef ;typedef int INTEGER; int i, j; INTEGER i, j; typedef int* POINT; int* p1; POINT p1;,自定义类型(typedef)的使用方法,定义变量 int i变量名新类型名 int INTEGER加上 typedef typedef int INT

8、EGER用新类型名定义变量 INTEGER i;,2.文件类型指针,FILE * fp指向文件缓冲区,通过移动指针实现对文件的操作,fp,同时使用多个文件时,每个文件都有缓冲区,用不同的文件指针分别指示。,如何使fp与具体文件挂钩?,*12.1.6文件控制块FCB,文件控制块FCB(File Control Block) OS中对文件的操作控制通过FCB,处理的是FCB列表一个文件对应一个FCB文件缓冲区由程序中fopen语句动态创建打开文件时, FCB的内容信息被复制到文件缓冲区保存用文件指针指向文件缓冲区实现对文件数据的访问,12.1.7 文件处理步骤,四个步骤: 定义文件指针 打开文件:

9、文件指针指向磁盘文件缓冲区 文件处理:文件读写操作 关闭文件,12.2 用户信息加密和校验,【例12-2】为了保障系统安全,通常采取用户帐号和密码登录系统。系统用户信息存放在一个文件中,系统帐号名和密码由若干字母与数字字符构成,因安全需要文件中的密码不能是明文,必须要经过加密处理。请编程实现:输入5个用户信息(包含帐号名和密码)并写入文件f12-2.txt。要求文件中每个用户信息占一行,帐号名和加密过的密码之间用一个空格分隔。密码加密算法:对每个字符ASCII码的低四位求反,高四位保持不变(即将其与15进行异或)。,12.2.1 程序解析,int main(void)FILE *fp; /*1

10、.定义文件指针*/int i;void encrypt(char *pwd);struct sysuser su; /*2.打开文件,进行写入操作*/if(fp=fopen(f12-2.txt,w) = NULL) printf(File open error!n); exit(0); for(i=1;i=5;i+)/*3. 将5位用户帐号信息写入文件*/ printf(Enter %i th sysuser(name password):,i); scanf(%s%s,su.username,su.password); /*输入用户名和密码 */ encrypt(su.password);

11、/*进行加密处理*/ fprintf(fp,%s %sn,su.username,su.password); /*写入文件*/ if(fclose(fp)/*4.关闭文件*/ printf(Can not close the file!n); exit(0); return 0;,/*加密算法*/void encrypt(char *pwd) int i; /*与15(二进制码是00001111)异或,实现低四位取反,高四位保持不变*/ for(i=0;istrlen(pwd);i+) pwdi = pwdi 15;,#include #include struct sysuser/*用户帐号

12、信息结构*/char username20; char password8;,12.2.2 打开文件和关闭文件,if(fp=fopen(f12-2.txt,w) = NULL) printf(File open error!n); exit(0);fopen(文件名,文件打开方式)使文件指针与相应文件实体对应起来程序对文件指针进行操作,即fp代表磁盘文件函数fopen() 的返回值执行成功,则返回包含文件缓冲区等信息的FILE型地址,赋给文件指针fp不成功,则返回一个NULL(空值)exit(0):关闭所有打开的文件,并终止程序的执行参数0表示程序正常结束;非0参数通常表示不正常的程序结束,文

13、件打开方式,fp=fopen(f12-2.txt,w)文件打开方式参数表,文件读写与打开方式,if 读文件 指定的文件必须存在,否则出错;if 写文件(指定的文件可以存在,也可以不存在) if 以 w 方式写 if 该文件已经存在 原文件将被删去重新建立; else 按指定的名字新建一个文件; else if 以 a 方式写 if 该文件已经存在 写入的数据将被添加到指定文件原有数据的后面,不会删去原来的内容; else 按指定的名字新建一个文件(与“w”相同);if 文件同时读和写 使用 r+、w+ 或 a+ 打开文件,关闭文件,if( fclose(fp) ) printf( Can not close the file!n );exit(0);fclose(文件指针)把缓冲区中的数据写入磁盘扇区,确保写文件的正常完成释放文件缓冲区单元和FILE结构体,使文件指针与具体文件脱钩。函数fclose() 的返回值返回0:正常关闭文件返回非0:无法正常关闭文件,

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

当前位置:首页 > 行业资料 > 其它行业文档

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