使用文件存储数据 c语言,C语言的数据存储盘.ppt

C语言的数据存储盘

《C语言程序设计》 第六章 磁盘数据存储 文件的引出 为什么使用文件存储数据? 前面的程序里,我们学习了数组类型,能够存储一批数据。有一个问题是,这些数据只有在程序运行过程中才存储在数组中的,当程序运行结束后,系统就释放数组的存储空间,数据将不能保存下来。如果下次操作仍然针对同样的一批数据,我们就不得不重新从键盘上输入这批数据或重新初始化数组了。还有一个问题,程序的运行结果都是输出到屏幕上的,程序运行结束后,结果并没有保存下来,如果希望每次都将程序输出到屏幕上的数据存储下来,应该怎么办呢? 这样就需要用到磁盘文件了。 我们可以用磁盘文件把程序的已知数据存储起来,需要的时候让程序从文件里直接读取数据,而不需每次从键盘输入了。也可以将程序的运行结果写入文件中存起来。 文件的分类 文本文件和二进制文件 文本文件中按字符存储内容,每一个字节存放一个ASCII码,代表一个字符。也叫ASCII码文件。 二进制文件则是将数据按内存中的原样(二进制形式)存放在磁盘上。 文件的分类举例 例如:存储12345这个整数, 如果用文本文本文件存储,将存储12345,共5个数字字符,共占5个字节。 如果用二进制形式存储,将存储12345在内存中的二进制形00110001,共占2个字节。 显然:二进制文件占存储空间较小,但都是0101……二进制代码,不直观;而文本文件占存储空间大,但直观可查看,可以用Windows中的记事本程序或DOS中的TYPE命令直接查看。 不论是二进制文件,还是文本文件,他们的文件操作都遵循同样的操作步骤,只不过打开文件的使用方式不同而已。 FILE-构造的文件类型 缓冲文件系统中,系统为每个正在被使用的文件都在内存中开辟一个区域,存放有关该文件的信息(如文件名、文件状态、当前位置等)。C语言将这些信息保存在一个结构体变量中,该结构体类型是由系统在stdio.h中定义好的,取名为FILE。 只需定义一个FILE类型的指针变量,通过该指针变量调用有关文件操作函数对指定文件进行操作。 打开文件函数 fopen 对文件进行读写之前应当“打开”该文件,读写完毕之后应当“关闭”该文件。 ANSI C规定使用fopen函数来打开文件。 FILE *fopen(char *filename, char *mode); 其中,filename指定要打开的文件名,可以使用字符串常量,也可以使用指向字符串的指针变量;mode表示文件的使用方式(见215页)。 如前例中fp=fopen("letter.dat","w"); 说明 1. 使用“r”和”r+”时,文件应已经存在。 2. 使用“w”和”w+”时,新建一个文件,若磁盘上已有同名文件,则被清除。 3. 使用“a”和”a+”时,文件应已经存在,原有内容不被删除,位置指针移到数据末尾,可以添加内容。 如果操作的是二进制文件,在打开方式中加上字母“b”。 2 文件读写分类函数 我们使用文件的目的是为了存放数据,因此,对文件的操作主要可以分为两种:读操作和写操作。读操作是从文件中读取数据;写操作是往文件中写数据,包括建立一个新文件、往文件中追加数据、插入数据或修改数据。 单字符写入或读取函数 1. fputc函数 2. fgetc函数 例如:fputc(‘A’,fp); 或fputc(ch,fp); ch=fgetc(fp) 字符串写入或读取函数 1. fputs函数 2. fgets函数 例如:fputs(“hello”,fp); 或fputs(str,fp); fgets(str,长度,fp); 块数据,二进制数据写入或读取函数 1. fwrite函数 2. fread函数 例如:sy4borrow.c 中的 fread(books,sizeof(struct book),N,fp); fwrite(books,sizeof(struct book),N,fp); 格式化写入或读取函数 1. fprintf函数 2. fscanf函数 例如: fprintf(fp,“%d:%.2f ”,i,score); fscanf(fp,“%d%f”,&i,&score); [补充] 在读文本文件时,遇到回车符(‘\r’==13)换行符(‘\n’==10) ,自动转换成一个换行符;写时,反过来,将一个换行符转换成一个回车符和一个换行符(为了可以使用TYPE命令显示其内容)。读写二进制文件则无此转换。 检测文件打开和其它文件使用函数 如果打不开文件(原因很多),fopen会返回空指针NULL,我们常用下面的方法检测文件是否打

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值