利用文件保存数据课件_第1页
利用文件保存数据课件_第2页
利用文件保存数据课件_第3页
利用文件保存数据课件_第4页
利用文件保存数据课件_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计第10章利用文件保存数据上一章内容回顾定义和使用结构体变量结构体数组结构体指针2/27本章学习目标理解C文件的有关概念掌握文件的操作理解文件的随机读写3/27C文件的相关概念文件(file)存储在外部介质(如磁盘)上的数据的集合程序文件:存放程序的文件.c.obj.exe数据文件:存储程序运行时读写的数据.dat输入输出流(stream)输入:文件内存输出:内存文件流式文件C语言把文件看作一个个字符(字节)的序列,由一个个的字符数据按顺序组成输入输出流的开始和结束受程序控制,不受物理符号(如回车换行符)控制5/27文件名文件名用于标识唯一一个文件由文件路径、文件名主干、文件后缀三部分组成d:\cc\temp\文件路径表示文件在外部存储设备中的位置文件名主干即文件标识,简称文件名文件后缀表示文件的性质6/27文件分类ASCII文件也称文本文件(text)每一个字节放一个ASCII代码字符数据只能以ASCII形式存储二进制文件把内存中的数据按其在内存中的存储形式原样输出到磁盘上数值数据可用ASCII形式,也可按二进制形式存储7/27文件指针文件信息区内存中有一个文件信息区,用于存储文件的相关信息,如文件名、文件状态及文件当前位置等文件信息保存在一个结构体变量中,结构体类型由系统声明,取名为FILE,定义FILE类型的信息包含在头文件stdlib.h中,不同的C编译系统的FILE类型不完全相同定义FILE类型的变量FILEf;f中存放文件的相关信息定义指向文件型数据的指针变量FILE*fp;fp指向某一个文件的文件信息区,通过该文件信息区中的信息能够访问该文件指向文件信息区的指针变量也称为指向文件的指针变量9/27内容进度C文件的有关概念文件的打开与关闭文件的顺序读写10/27文件的打开与关闭打开文件在读写文件之前应先打开文件打开文件是指为文件建立相应的信息区和文件缓冲区通常在打开文件时,指定一个指针变量指向该文件关闭文件是指撤销文件信息区和文件缓冲区,使文件指针变量不再指向该文件11/27关闭文件fclose函数用于关闭文件,撤销文件信息区和文件缓冲区,使文件指针变量不再指向该文件fclose(文件指针);使用完文件若不关闭将导致数据丢失,向文件写入数据时,先将数据输出到缓冲区,缓冲区满后才输出到文件,用fclose关闭文件时,先把缓冲区的数据输出到磁盘文件,然后释放文件指针变量如果顺利关闭了文件,返回0,否则返回EOF(-1)13/27内容进度C文件的有关概念文件的打开与关闭文件的顺序读写14/27文件的顺序读写对文件数据读写的顺序与数据在文件中的物理顺序一致顺序写时,先写入的数据存放在文件中前面的位置,后写如的数据存放在文件后面的位置顺序读时,先读文件中前面的数据,后读文件中后面的数据15/27向文件读写一个字符例10.2将一个磁盘文件中的内容复制到另一个磁盘文件中,将10.1中的文件中内容复制到磁盘文件中17/27/*将一个磁盘文件中的内容复制到另一个磁盘文件中*/#include<stdio.h>#include<stdlib.h>voidmain(){ FILE*in,*out; charch,in],out]; /*两个存放文件名的数组*/ printf("请输入读入文件(源数据文件)的名字:"); scanf("%s",infile); printf("请输入输出文件(接收文件)的名字:"); scanf("%s",outfile); if((in=fopen(infile,"r"))==NULL) /*打开输入文件*/ { printf("无法打开输入文件\n"); /*打开文件出错时,给予提示信息*/ exit(0); /*终止程序*/ } if((out=fopen(outfile,"w"))==NULL) /*打开输出文件*/ { printf("无法打开输出文件\n"); /*打开文件出错时,给予提示信息*/ exit(0); /*终止程序*/ } while(!feof(in)) /*遇到输入文件的结束标志时结束循环*/ { ch=fgetc(in); /*从输入文件读入一个字符,暂存于变量ch中*/ fputc(ch,out); /*将ch写到输出文件*/ putchar(ch); /*将ch显示到屏幕*/ } putchar(10); /*换行符的ASCII代码是10,向屏幕输出换行符*/ fclose(in); /*关闭输入文件*/ fclose(out); /*关闭输出文件*/}向文件读写一个字符串18/2719/27向文件读写一个字符串例10.3从键盘读入若干字符串,按字母顺序排序,然后把排好序的字符串送到磁盘文件保存/*从键盘读入若干字符串,按字母顺序排序,然后把排好序的字符串送到磁盘文件保存*/#include<stdio.h>#include<stdlib.h>#include<string.h>voidmain(){ FILE*fp; charstr[3][10],temp[10]; /*存放字符串的二维数组str,临时数组temp*/ inti,j,k,n=3; printf("Enterstrings:\n"); /*提示输入字符串*/ for(i=0;i<n;i++) gets(str[i]); for(i=0;i<n;i++) /*选择法排序*/ { k=i; for(j=i+1;j<n;j++) if(strcmp(str[k],str[j])>0) /*比较字符串大小*/ k=j; if(k!=i) /*将str[i]与str[k]的值对换*/ { strcpy(temp,str[i]); strcpy(str[i],str[k]); strcpy(str[k],temp); } } if((fp=fopen("string.dat","w"))==NULL) /*打开磁盘文件*/ { printf("Can'topenfile!\n"); exit(0); } printf("\nThenewsequence:\n"); for(i=0;i<n;i++) { fputs(str[i],fp);fputs("\n",fp); /*向磁盘文件写数据*/ printf("%s\n",str[i]); /*在屏幕上显示*/ }}用二进制方式读写文件fread(buffer,size,count,fp)fwrite(buffer,size,count,fp)buffer存放要读入或输出的数据的起始地址size是要读写的字节数要读写多少个size字节的数据项,返回值为count的值,即输入或输出数据项的完整个数21/2722/27用二进制方式读写文件例10.4从键盘输入10个学生的数据,然后把它们转存到磁盘文件中/*从键盘输入10个学生的数据,然后把它们转存到磁盘文件中*/#include<stdio.h>#defineSIZE10structstudent_type{ charname[10]; intnum; intage; charaddr[15];}stud[SIZE]; /*结构体数组,包括10个学生数据*/voidsave() /*定义save函数,向文件输出数据*/{ FILE*fp; inti; if((fp=fopen("stu.dat","wb"))==NULL) /*打开输出文件stu.dat*/ { printf("Can'topenthefile!\n"); return; } for(i=0;i<SIZE;i++) if(fwrite(&stud[i],sizeof(structstudent_type),1,fp)!=1) printf("error!\n"); fclose(fp);}voidmain(){ inti; printf("Pleaseenterdataofstudent(姓

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论