第6章 磁盘数据存储_第1页
第6章 磁盘数据存储_第2页
第6章 磁盘数据存储_第3页
第6章 磁盘数据存储_第4页
第6章 磁盘数据存储_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

16十月2023C语言程序设计前面程序的特点:⑴要想再次看到结果:必须重新运行程序⑵再次运行程序时:即使相同的数据也必须重新输入存在的问题:⑴运行结果不能保存⑵输入的数据也不能保存能不能把运行结果和运行需要的数据保存起来?如何解决?利用文件将数据或结果存储在磁盘上16十月2023C语言程序设计什么是文件?文件的分类:

C语言中,根据数据的组织形式,分为文本文件和二进制文件。文件的定义:根据特定目的而收集在一起并存储在外部介质上的相关数据的集合。16十月2023C语言程序设计如:整数10000

文本文件:把数据看成是字符的序列,每一个字节存放着一个字符的ASCII码,因此又称为ASCII码文件,内存中存储形式0010011100010000文本文件:0011000100110000001100000011000000110000

二进制文件:把数据按其在内存中的存储形式原样存放二进制文件:16十月2023C语言程序设计怎么使用文件?如何把程序运行结果保存到文件中?如何把程序运行需要的数据从文件中取出来?写文件文件的两种操作:读、写读文件16十月2023C语言程序设计第六章磁盘数据存储6.1将数据写入文件6.2文件读/写函数分类6.3文件定位函数☆☆本章在本课程中的地位:一般性了解16十月2023C语言程序设计6.1将数据写入文件例6.1将一串字符'A'-'Z'写入文件d:\letter.txt保存起来。#include<stdio.h>#include<stdlib.h>intmain(){charch;

FILE*fp;fp=fopen("d:\\letter.txt","w");for(ch='A';ch<='Z';ch++)

fputc(ch,fp);fputc('\n',fp);

fclose(fp);return0;}//定义文件指针,文件操作的步骤1

//新建并打开文件,文件操作的步骤2//将数据写入文件,文件操作的步骤3*///关闭文件,文件操作的步骤4*/EG601.Cif(fp==NULL)/*判断文件是否打开成功*/{printf("Openningfileerror.\n");

exit(0);}//输出到显示器上#include<stdio.h>intmain(){charch;for(ch='A';ch<='Z';ch++)putchar(ch);putchar('\n');return0;}16十月2023C语言程序设计文件操作的步骤:⑴定义文件类型指针文件类型FILE在头文件stdio.h中声明FILE*fp;⑵打开文件使用文件,不论是写入数据还是读出数据,不论是对一个已有的文件进行读写还是对新文件进行操作,首先都是使用fopen函数打开文件。fp=fopen("letter.txt","w");⑶向文件写入数据,或从文件读取数据写入和读取的数据方式不同,需使用不同的读写文件函数;这是最关键的一步。fputc(ch,fp);⑷关闭文件使用完毕必须关闭文件,才能彻底的将文件缓冲区的数据写入文件,并释放系统分配的文件缓冲区。fclose(fp);16十月2023C语言程序设计一、文件类型指针

文件类型指针的定义格式为:

FILE

*指针变量名;如:FILE*fp;FILE*fp1,*fp2;注意:1.只有通过文件指针变量才能调用相应的文件

2.FILE必须大写16十月2023C语言程序设计二、文件的打开(fopen函数)1.fopen函数的使用格式:

FILE*fopen(文件名,打开方式);

例:FILE

*fp;fp

=fopen("a.txt","w");说明:①文件名常以字符串的形式给出;文件名可以带路径;

fp=fopen("c:\\Test\\a.txt","r");②如果文件名存放在数组中,则给出数组名即可,此时不能加双引号;

charstr[30]="c:\\Test\\a.txt";fp=fopen(str,"r");//与①等价

③打开方式是指对该文件进行什么操作。2.文件的打开方式:16十月2023C语言程序设计使用方式含义文件类型说明"r"只读文本文件为从文件中读出数据而打开文件"w"只写文本文件为往文件中写入数据而打开文件"a"追加文本文件为向文件尾部增加数据而打开文件"r+"读写文本文件为读/写而打开文件"w+"读写文本文件为读/写而建立一个新文件"a+"读写文本文件为读/写而打开文件"rb"只读二进制文件为从文件中读出数据而打开文件"wb"只写二进制文件为往文件中写入数据而打开文件"ab"追加二进制文件为向文件尾部增加数据而打开文件"rb+"读写二进制文件为读/写而打开文件"wb+"读写二进制文件为读/写而建立一个新文件"ab+"读写二进制文件为读/写而打开文件fp1=fopen("student.txt","r");fp2=fopen("score.dat","wb+");16十月2023C语言程序设计3、说明:①、用"r"方式打开的文件,要求文件已经存在;不能打开一个并不存在的文件,否则出错。②、用"w"方式打开文件时:如果指定的文件不存在,则以指定的文件名建立新文件;如果指定的文件存在,则先删除原来的文件,再建立新文件。③、用"a"方式打开文件时,指定的文件一定要存在,否则出错;且自动将数据写入文件末尾;16十月2023C语言程序设计④、用"r+"、"w+"、"a+"方式打开的文件,可以用来进行读/写数据;"r+"方式:……?"w+"方式:……?"a+"方式:……?⑤、如果文件打开时出错,如:用"r"方式打开一个并不存在的文件;写文件时磁盘有写保护;磁盘已满无法建立新文件等此时fopen函数将返回空指针NULL16十月2023C语言程序设计常用下面的方法打开文件:fp=fopen("score.txt","r");if(fp==NULL){printf("Cannotopenscore.txt!\n");exit(0);}或:if((fp=fopen("score.txt","r"))==NULL){printf("Cannotopenscore.txt!\n");exit(0);}说明:exit函数的作用是关闭所有文件,结束程序头文件:stdlib.h16十月2023C语言程序设计三、关闭文件函数fclose

使用完一个文件后应该将它关闭,关闭后文件指针变量不再指向该文件(此后不能再通过该指针对文件进行读/写操作)fclose的函数原型为:

int

fclose(FILE*fp)返回值:若正常关闭,返回0;若关闭失败,返回非0例:fp=fopen("f1.c","r");……fclose(fp);关闭文件的重要性:写文件时,在"输出缓冲区"装满后,才将数据一起写入文件。当程序结束时,缓冲区可能还未满,如未关闭文件就结束程序,则缓冲区的数据不能写入文件,会丢失数据。使用fclose函数,不论缓冲区是否已满,都会将缓冲区的数据写入文件,再关闭文件。16十月2023C语言程序设计四、检测文件是否结束函数feof作用:检测对fp所指向文件的操作是否已经达到了文件尾部feof的函数原型为:

int

feof(FILE*fp)返回值:非0表示已到文件尾部;0表示未到文件尾部例:while(feof(fp)==0){

……}或:while(!feof(fp)){

……}16十月2023C语言程序设计6.2文件读写分类函数1、字符读写函数fputc、fgetc2、字符串读写函数fputs、fgets3、"数据块"读写函数fread、fwrite4、格式化输入输出函数fprintf、fscanf文本文件二进制文件均可16十月2023C语言程序设计1、字符读写函数⑴fputc()函数:int

fputc(charch,FILE*fp)

作用:将ch中的字符输出到fp所指向的文件中返回值:输出成功则返回所输出的字符,失败则返回EOF

通常,fputc函数用于往文本文件中写入一个字符。#defineEOF-1例:FILE*fp;charch;fp=fopen("file1.txt","w");if(fp==NULL){printf("Cannotopenfile1.txt!\n");exit(0);}fputc('s',fp);//将字符's'写入fp指向的文件file1.txtch=getchar();fputc(ch,fp);//将变量ch中的字符写入文件file1.txtfclose(fp)EG602.C16十月2023C语言程序设计⑵fgetc()函数:int

fgetc(FILE*fp)

作用:从fp所指向的文件中读入一个字符返回值:返回所读的字符,如发生错误或读到文件结束符则返回EOF

……ch=fgetc(fp);while(ch!=EOF){putchar(ch);ch=fgetc(fp);}

注意:EOF是一个符号常量,在stdio.h中定义,其值为–1,一般用EOF作为文件结束符16十月2023C语言程序设计2、字符串读写函数⑴fgets函数格式:fgets(str,n,fp)

说明:str:字符数组名;n:整数值;fp:文件指针变量作用:从fp所指向的文件中读(n-1)个字符,将它们存放到str数组中,并在其后自动加一个'\0';如果读入(n-1)个字符前遇到换行符或文件结束符EOF,则结束读入。返回值:成功返回str数组的首地址,失败返回NULL⑵fputs函数格式:fputs(str,fp)

说明:str:字符串常量或字符数组名或字符指针变量

fp:文件指针变量作用:将str字符串写到fp所指向的文件中,但'\0'不写入返回值:成功返回0,出错返回非0值16十月2023C语言程序设计例:从键盘输入一行字符,以'\n'结束,将这行字符保存到磁盘文件"d:\test.txt"中。#include<stdio.h>#include

<stdlib.h>intmain(){

return0;}EG603.CFILE*fp;charstr1[30],str2[30];if((fp=fopen("d:\\test.txt","w"))==NULL){printf("cannotopend:\\test.txt!\n");exit(0);}gets(str1);fputs(str1,fp);fclose(fp);fp=fopen("d:\\test.txt","r");

fgets(str2,30,fp);puts(str2);fclose(fp);16十月2023C语言程序设计3、"数据块"读写函数格式: fread(buffer,size,count,fp) fwrite(buffer,size,count,fp)作用:对fp指向的文件读/写count个大小为size的数据项说明:(1)buffer:是一个地址;通常是一个数组名对fread,是从文件中读取的数据要存放的存储区的首地址对fwrite,是向文件中写入数据时存储变量的地址(2)size:要读写的每个数据项所占用的字节数(3)count:要读写数据项的个数(4)fp:文件指针变量注意:用fread,fwrite必须采用二进制方式打开文件structstudentstu[30];for(i=0;i<30;i++)//从fp指向的文件中读出30个学生的信息

fread(&stu[i],sizeof(stu),1,fp);16十月2023C语言程序设计#include<stdio.h>#include<stdlib.h>intmain(){FILE*fp;inti,a[10],b[10];if((fp=fopen("datafile.dat","wb+"))==NULL){ printf("Cannotopendatafile.dat!\n"); exit(0);}for(i=0;i<10;i++){ scanf("%d",&a[i]); fwrite(&a[i],sizeof(int),1,fp);}rewind(fp); //使文件指针fp重新指向文件开头

for(i=0;i<10;i++){ fread(&b[i],sizeof(int),1,fp); printf("%4d",b[i]);}fclose(fp);return0;}例:从键盘输入10个整数,把它们保存到文件“datafile.dat”中,再从文件中读取这些整数,并输出到显示器上。EG604.C16十月2023C语言程序设计也可以采用下面的形式:#include<stdio.h>#include<stdlib.h>intmain(){FILE*fp;inta[10],b[10],i;for(i=0;i<10;i++)scanf("%d",&a[i]);fp=fopen("datafile.dat","wb+");if(fp==NULL){printf("Cannotopenfiledatafile.dat!\n");exit(0);}fwrite(a,sizeof(int),10,fp);

rewind(fp);

fread(b,sizeof(int),10,fp);for(i=0;i<10;i++)printf("%4d",b[i]);fclose(fp);return0;}//或:fwrite(a,10*sizeof(int),1,fp);//或:fread(b,10*sizeof(int),1,fp);EG605.C//或:fread(b,5*sizeof(int),2,fp);16十月2023C语言程序设计4、格式化输入输出函数

fprintf(文件指针变量,格式字符串,输出表列);fscanf(文件指针变量,格式字符串,地址表列);说明:

fprintf和fscanf函数的使用方法与printf和scanf函数类似,只是多了一个参数----文件指针变量,该参数用来指出向哪个文件写数据或从哪个文件读数据。例:把整数a、b输出到屏幕上:printf("%d%d\n",a,b);把整数a、b输出fp指向的文件中:fprintf(fp,"%d%d\n",a,b);把fp指向的文件中读出整数a、b:fscanf(fp,"%d%d",&c,&d);16十月2023C语言程序设计例:#include<stdio.h>#include<stdlib.h>intmain(){FILE*fp;inta,b,c,d;fp=fopen("exfile.txt","wb+");if(fp==NULL){printf("Cannotopenexfile.txt!\n");exit(0);}scanf("%d%d",&a,&b);

fprintf(fp,"%d,%d\n",a,b);

rewind(fp);

fscanf(fp,"%d,%d",&c,&d);printf("%d,%d\n",c,d);fclose(fp);return0;}EG606.C16十月2023C语言程序设计6.3文件定位函数一、rewind函数voidrewind(FILE*fp)作用:使位置指针重新返回文件的

温馨提示

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

评论

0/150

提交评论