




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、文件操作技术文件操作技术教教 学学 内内 容容u文件的打开与关闭;u了解文件概念;u掌握文件的基本操作;u运用文件指针;u掌握读、写文件的函数掌握读、写文件的函数; ; u学会定位文件学会定位文件 。文件概述文件概述文件是指一组相关数据的有序集合,这个数据集有一个名称,叫做文件名。通常储存在外部介质上(大多数情况是储存在磁盘上),在使用的时候才调入到内存中。一般情况下,使用计算机也就是在使用文件,在前面的程序设计中,我们介绍了输入和输出,即从标准输入设备(键盘)输入,由标准输出设备(显示器或打印机)输出。不仅如此,我们也常把磁盘作为信息载体,用于保存中间结果或最终数据。当有大量数据输入的时候,
2、通过编辑工具可以事先建立输入数据文件,程序运行时从指定的文件中读取数据,从而实现了数据“一次输入,多次使用”的效果。同理,当有大量的数据输出时,也可以将其输出到指定文件,随时随地都可以查看相应的文件。在使用一些字处理工具时,会利用打开一个文件来将磁盘的信息输入到内存,通过关闭一个文件来实现将内存数据输出到磁盘。这时的输入和输出是针对文件系统,故文件系统也是输入和输出的对象。所有文件都是通过流进行输入、输出操作。流是一个数据字节的序列,流入程序的流称为“输入流”;相对的,如果是流出程序的流称为“输出流”。流可以分为两类:文本流和二进制流。如图所示。 文件概述文件概述(1)文本流是一种字符序列,仅
3、包含字符。文本流是按照行组织,对于一些特殊的字符(如换行符)有特殊的含义。(2)二进制流是一种字符序列,与外设中的字节序列一一对应,不对字节中的内容进行转换,如遇到换行符也不会执行换行操作(在二进制流中,换行符也只是一个二进制代码,没有特殊的意义。)与文本流和二进制流相对应,文件可以分为文本文件和二进制文件两大类。如图所示。文件可以从不同的角度进行具体的分类,可以分为从用户角度和按照文件内容来分类。(1)从用户的角度(或所依附的介质)看,文件可分为普通文件和设备文件两种。普通文件是指驻留在磁盘或其它外部介质上的一个有序数据集。设备文件是指与主机相联的各种外部设备,如显示器、打印机、键盘等。在操
4、作系统中,把外部设备也看作是一个文件来进行管理,把它们的输入、输出等同于对磁盘文件的读和写。(2)按文件内容来分:源文件、目标文件、可执行文件、头文件、数据文件等。在语言中,文件操作都是由库函数来完成的。在本章内将介绍主要的文件操作函数。(1)文本文件(Text),也称为ASCII文件,又称字符文件。这种文件在保存时,每个字符对应一个字节,用于存放对应的ASCII码。ASCII文件可以在屏幕上按字符显示,正是因为按字符显示的特点,所以能读懂文件的内容。(2)二进制文件,不是保存ASCII码,而是按二进制的编码方式来保存文件内容。二进制文件虽然也能够像ASCII文件一样在屏幕上显示,但是二进制文
5、件的内容却无法读懂。文件基本操作文件基本操作文件的基本操作包括文件的打开和关闭,除了标准的输入、输出文件外,其他所有的文件都必须先打开,再使用。而使用结束后,必须关闭该文件。C语言用缓冲文件系统来处理文件,缓冲文件系统是指系统自动在内存区为每一个正在使用的文件开辟一个缓冲区。当需要把数据写入磁盘的时候,首先需要将数据写入缓冲区,系统会自动完成把数据从缓冲区写入磁盘文件的工作,从磁盘读入数据同样也要经过缓冲区。在C语言中,缓存区的大小由各个具体的C语言版本确定,一般是512字节。文件基本操作文件基本操作 1 1 文件指针文件指针文件指针是缓冲文件系统中的关键概念,C系统为每个打开的文件在内存中开
6、辟一个缓冲区,用于存放文件的有关信息,这些信息包括文件名、状态和当前位置等。文件指针是一个指向文件有关信息的指针,他们保存在一个结构体变量中。在使用文件时需要在内存中为其分配空间,用来存放文件的基本信息,该结构体类型是由系统定义的,C语言规定该类型为FILE型,其声明如下。typedef structshort level; /*缓冲区的使用量*/unsigned flags; /*标志文件状态*/char fd; /*文件号*/unsigned char hold; /*无缓冲区取消字符输入*/short bsize; /*缓冲区的大小*/unsigned char *buffer; /*缓
7、冲区指针*/unsigned ar *curp; /*无活动指针*/unsigned istemp; /*草稿文件标识*/short token; /*做正确性检测*/FILE;文件基本操作文件基本操作从上面的结构中会发现使用了typedef定义了一个FILE为该结构体类型,在编写程序时可直接使用上面定义的FILE类型来定义变量,注意在定义变量时不用将结构体内容全部给出,只需写成如下形式。FILE FILE * *文件指针名文件指针名; ;在使用FILE定义文件指针时,FILE要大写,它实际是由系统定义的一个结构体,该结构体中含有文件名、文件当前位置和文件状态等信息。定义文件指针其实很简单,例
8、如:FILE *fp;fp是一个指向FILE类型的指针变量,表示fp是一个指向FILE结构体的指针,通过fp即可找到存放某个文件信息的结构体类型变量,之后按照变量提供的信息找到相应的文件,实施对文件的操作。2 2 文件的打开文件的打开文件的开关是指文件的“打开”和“关闭”。其实不光是C语言,其他高级开发语言关于文件“打开”和“关闭”的特点也是一样的,即在文件查看、输入或编辑数据之前应该先将该文件“打开”,在使用结束后要将其文件“关闭”。C语言中是使用fopen()函数来实现文件的打开功能,fopen()函数是ANSIC规定的标准输入输出函数库中的函数。打开文件的操作就是创建一个流,fopen函
9、数的原型在stdio.h中,其调用的一般形式为。FILE *fp;fp=fopen(文件名,使用文件方式);其中“文件名”是将要被打开文件的文件名;“使用文件方式”是指对打开的文件是要进行读还是写。使用文件方式如表所示。 文件基本操作文件基本操作 在使用“r”打开一个文本文件时,不能用于其他操作(例如输出数据等)。而且使用“r”打开文件之前,一定要确定想要打开的文件是已经存在的,如果想要打开的文件是并不存在的,那么就会造成不必要的错误。 使用“w”打开或建立一个文本文件时,只能向该文件进行写入操作,不能够实现其他功能。而且当打开的文件不存在时,需要以指定的文件名创建相应的文件。如果想要打开的文
10、件已经存在,也就是说被指定的文件名已经被使用,则需要将该文件删除,然后重新创建一个被指定文件名的相应文件。文件使用方式含 义“r”打开一个文本文件,只允许读数据“w”打开或建立一个文本文件,只允许写数据“a”打开一个文本文件,并在文件末尾写数据“rb”打开一个二进制文件,只允许读数据“wb”打开或建立一个二进制文件,只允许写数据“ab”打开一个二进制文件,并在文件末尾写数据“r+”打开一个文本文件,允许读和写“w+”打开或建立一个文本文件,允许读写“a+”打开一个文本文件,允许读,或在文件末追加数据“rb+”打开一个二进制文件,允许读和写“wb+”打开或建立一个二进制文件,允许读和写“ab+”
11、打开一个二进制文件,允许读,或在文件末追加数据文件基本操作文件基本操作 在使用“a”方式打开文件时,应该是想要向一个已经存在的文件追加新的数据(即不删除文件本身已有的数据,在原有基础上增添新的数据)时才使用。同“r”打开方式相同,在使用“a”打开文件之前,也需要确定该文件是真实存在的,如果不是,就会出错。在打开时,位置指针移到文件的末尾。 用“r+”、“w+”、“a+”方式打开的文件,不但可以用来进行输入数据的操作,也可以实现输出数据的操作(即读写操作)。用“r+”方式时,也同样需要确定该文件是否已经存在,只有文件存在才能够实现输入或者输出数据。用“w+”方式时,是先新创建一个文件,然后向其文
12、件写入数据,然后可以读此文件中的数据。用“a+”方式打开的文件其原内容不能删除,位置指针移到文件末尾,只能在文件的末尾追加新的数据。不但可以添加,也可以读。如果读者有一些英文功底,那么记录上述表格的内容会很轻松,在此为读者讲解一下表格中的字母代表了哪些单词。r(read):读,在这里是“只读”的意思。w(write):书写,在这里是“只写”的意思。a(append):附加、添加,这里是“追加”的意思。b(binary):二进位的、二元的,在这里是“二进制文件”的意思。+:在这里是读和写的意思。如果要以只读方式打开文件名为123的文本文档文件应写成如下形式。FILE *fp;fp=(123.tx
13、t,r);如果使用fopen函数打开文件成功,将返回一个有确定指向的FILE类型指针。若打开失败,则返回NULL,通常打开失败会有以下三方面原因。(1)指定的盘符或路径不存在。(2)文件名中含有无效字符。(3)以r模式打开一个不存在的文件。文件基本操作文件基本操作 3 3 文件的关闭文件的关闭文件在使用完毕后,应使用fclose()函数将其关闭,“关闭”的含义是使用文件指针变量不指向该文件,也就是说文件指针变量与文件“脱钩”(脱离关系),从此不能再通过该指针对原来与之相对应的文件进行读写操作,除非是重新再打开,使该指针变量重新指向该文件。fclose函数和fopen函数一样,原型也在stdio
14、.h中,调用的一般形式为。fclose(文件指针名);例如:fclose(fp);fclose函数也带回一个值,当正常完成关闭文件操作时,fclose函数返回值为0。否则返回EOF(即-1)。在程序结束之前应关闭所有文件,这样做的目的是为了防止因为没有关闭文件而造成的数据流失。运用文件指针运用文件指针文件指针是缓冲文件系统中的关键概念,文件指针是缓冲文件系统中的关键概念,C C系统为每个打开的文件在内存系统为每个打开的文件在内存中开辟一个缓冲区,用于存放文件的有关信息,这些信息包括文件名中开辟一个缓冲区,用于存放文件的有关信息,这些信息包括文件名、状态和当前位置等。文件指针是一个指向文件有关信
15、息的指针,他、状态和当前位置等。文件指针是一个指向文件有关信息的指针,他们保存在一个结构体变量中们保存在一个结构体变量中 读写文件读写文件打开文件后,即可对文件进行读出或写入的操作。在前面的讲解中,已经了解到C语言文件的读写操作都是需要通过函数实现的,C语言中提供了丰富的文件操作函数,将在本节中进行详细介绍C语言文件常用的读写函数。在使用读写函数的时候,请读者注意,头文件“stdio.h”是都必须包含的。1 1 写字符函数写字符函数fputcfputc函数函数fputc函数的一般形式如下。fputc函数(字符,文件指针名);fputc函数的功能是:把一个字符写入指针所指向的文件中,前文所讲的“
16、w”(写)、“a”(追加)、“r+”(读写)和“a+”(读、追加)方式都可以打开文件指针名所指向的文件。例如:fputc(ch,fp);该函数的作用是把一个字符写到fp所指向的文件中去。其中ch是要输出的字符,它可以是一个字符常量,也可以是一个字符变量。fp是文件指针变量。当函数输出成功则返回值就是输出的字符;如果输出失败,则返回EOF(即-1),EOF是在stdio.h文件中定义的符号常量,值为-1。实例 编程实现向E:Cyuyan01.txt中写入“好好学习fputc()函数,不难熟练掌握!”,以“*”结束输入。 读写文件读写文件 2 2 读字符函数读字符函数fgetcfgetc函数函数f
17、getc函数的一般形式如下。字符变量=fgetc(文件指针名);fgetc函数的功能是:从文件指针指向的磁盘文件中读取一个字符,并且将读取的字符储存到字符变量中,前文所讲的“r”(读)和“r+”(读写)的方式都可以打开其文件指针指向的文件。fgetc函数的调用形式如下所示。ch=fgetc(fp);该函数作用是从fp指向的文件读入一个字符赋给ch。在文件打开时,该指针总是指向文件的第一个字节。使用fgetc函数之后,该位置指针将发生变化,向后移动一个字节。在实际应用中,可以连续多次的使用fgetc函数,读取多个字符。当函数遇到文件结束符时将返回一个文件结束标志EOF(即-1)。实例 要求在程序
18、执行前建文件E:Cyuyan02.txt,文档内容为:“通过实例的练习就可以熟练掌握fgetc函数了!”,在屏幕中显示出该文件内容。 3 3 写字符串函数写字符串函数fputsfputs函数函数fputs函数与fputc函数类似,不同的是fputc每次只向文件中写一个字符,而fputs函数每次向文件中写入一个字符串。fputs函数的一般形式如下。fputs(字符串,文件指针)该函数的作用是向指定的文件写入一个字符串,其中字符串可以是字符串常量,也可以是字符数组名、指针或变量。实例 向指定的磁盘文件中写入字符串“加油,加油!努力,努力!”。 读写文件读写文件 4 4 读字符串函数读字符串函数fg
19、etsfgets函数函数fgets函数与fgetc函数类似,不同的是fgetc每次从文件中读出一个字符,而fgets函数每次从文件中读出一个字符串。fgets函数的一般形式如下。fgets(字符数组名,n,文件指针);该函数的作用是从指定的文件中读一个字符串到字符数组中。n表示所得到的字符串中字符的个数(包含0)。实例 读取任意磁盘文件中的内容。 5 5 格式化写入函数格式化写入函数fprintffprintf函数函数格式化就是把想要输出的数据,按照一定的格式输出。在数据输入输出一章讲过printf函数和scanf函数,这两个都是格式化读写函数,本小节要介绍的这两个函数fprintf和fsca
20、nf函数与printf和scanf作用相似,但是这两个函数和前面讲过的printf及scanf最大的不同就是读写的对象不同,他们读写的对象不是终端而是磁盘文件。printf函数、scanf函数、fprintf函数和fscanf这些关键字的最后一个字母都是f,即format,表示“格式”的意思。fprintf函数的一般形式如下。ch=fprintf(文件类型指针,格式字符串,输出列表);fprintf函数的功能是:将“输出列表”数据按照指定的格式输出到“文件指针名”所指向的磁盘文件上。例如:fprintf(fp,”%d”,i);它的作用是将整型变量i的值按%d的格式输出到fp指向的文件上。实例
21、将数字107以字符的形式写到磁盘文件中。 读写文件读写文件 6 6 格式化读取函数格式化读取函数fscanffscanf函数函数fscanf函数的一般形式如下。fscanf(文件类型指针,格式字符串,输入列表)fscanf函数的功能是:将“格式字符串”中指定的格式,从“文件指针名”指向的文件中,将“输入列表”的数据输入数据缓冲区。例如:fscanf(fp,”%d”,&i);它的作用是读入fp所指向的文件上的i的值。实例 将文件中的15个字符以整数形式输出。7 7 数据块读写函数数据块读写函数freadfread函数和函数和fwritefwrite函数函数在使用fprintf函数和fscanf函
22、数,由于输入时,要将文本文件转换为二进制的文件,在输出时又要将二进制文件转换为字符,花费时间较多。所以fprintf函数和fscanf函数对磁盘文件的读写非常方便,但是在内存与磁盘交换数据的情况时,最好使用数据块读写函数fread函数和fwrite函数。前面介绍的fputc和fgetc函数每次只能读写文件中的一个字符,但是在编写程序的过程中往往需要对整块数据进行读写,例如对一个结构体类型变量值进行读写,下面就将介绍下实现整块读写功能的fread和fwrite函数。fread函数的一般形式如下。fread(buffer,size,count,fp)读写文件读写文件在fread函数一般形式中的各个
23、参数的含义。fp是文件的指针;buffer是一个指针,是用于存放输入数据块的首地址;size则是用来表示一个数据块的字节数;count用于表示将要读取的数据块的块数。该函数的作用是从fp所指的文件中写入count次,每次读出大小为size个字节,并且将读入的信息保存在buffer地址中。fwrite函数的一般形式如下。fwrite(buffer,size,count,fp);该函数的作用是从fp所指的文件中读入count次,每次读出大小为size个字节,并且将读入的信息保存在buffer地址中。例如:fread(a,2,3,fp);其意义是从fp所指的文件中,每次读2个字节送入实数组a中,连续
24、读3次;fwrite(a,2,3,fp)其意义是将a数组中的信息每次输出2个字节到fp所指向的文件中,连续输出3次。实例 编程实现将录入的通讯录信息保存到磁盘文件中,在录入完信息后,要将所录入的信息全部显示出来。 文件的打开与关闭文件的打开与关闭 文件的开关是指文件的“打开”和“关闭”。其实不光是C语言,其他高级开发语言关于文件“打开”和“关闭”的特点也是一样的,即在文件查看、输入或编辑数据之前应该先将该文件“打开”,在使用结束后要将其文件“关闭”。16.4.1 文件的打开C语言中使用fopen()函数来实现文件的打开功能,fopen()函数是ANSIC规定的标准输入输出函数库中的函数。打开文
25、件的操作就是创建一个流,fopen函数的原型在stdio.h中,其调用的一般形式为。01 FILE *fp;02 fp=fopen(文件名,使用文件方式);其中“文件名”是将要被打开文件的文件名;“使用文件方式”是指对打开的文件是要进行读还是写。使用文件方式如表16.1所示。表16.1使用文件方式文件使用方式含 义“r”打开一个文本文件,只允许读数据“w”打开或建立一个文本文件,只允许写数据“a”打开一个文本文件,并在文件末尾写数据“rb”打开一个二进制文件,只允许读数据“wb”打开或建立一个二进制文件,只允许写数据“ab”打开一个二进制文件,并在文件末尾写数据“r+”打开一个文本文件,允许读
26、和写“w+”打开或建立一个文本文件,允许读写“a+”打开一个文本文件,允许读,或在文件末追加数据“rb+”打开一个二进制文件,允许读和写“wb+”打开或建立一个二进制文件,允许读和写“ab+”打开一个二进制文件,允许读,或在文件末追加数据写字符函数写字符函数fputc函数函数写字符函数写字符函数fputcfputc函数函数#include #include #include #include main()main() FILE FILE * *fp;fp;/ /* *定定义义一一个个指向指向FILEFILE类类型型结构结构体的指体的指针变针变量量* */ / char ch; char ch;
27、/ /* *定定义变义变量量为为字符型字符型* */ / if (fp = fopen(E:Cyuyan01.txt, w) = NULL) if (fp = fopen(E:Cyuyan01.txt, w) = NULL)/ /* *以只以只写写方式打方式打开开指定文件指定文件* */ / printf( printf(不能打不能打开开的文件的文件!n);!n); exit(0); exit(0); ch = getchar(); ch = getchar();/ /* *fgetcfgetc函函数带数带回一回一个个字符字符赋给赋给chch* */ / while (ch != while
28、(ch != * *) )/ /* *当输当输入入#时结时结束循束循环环* */ / fputc(ch, fp); fputc(ch, fp);/ /* *将读将读入的字符入的字符写写到磁到磁盘盘文件上去文件上去* */ / ch = getchar(); ch = getchar();/ /* *fgetcfgetc函函数继续带数继续带回一回一个个字符字符赋给赋给chch* */ / fclose(fp); fclose(fp);/ /* *关闭关闭文件文件* */ / 读字符函数读字符函数fgetc函数函数读字符函数读字符函数fgetcfgetc函数函数#include #include
29、main()main() FILE FILE * *fp;fp;/ /* *定定义义一一个个指指向向FILEFILE类类型型结构结构体的指体的指针变针变量量* */ / char ch; char ch;/ /* *定定义变义变量及量及数组为数组为字符型字符型* */ / fp = fopen(e:Cyuyan02.txt, r); fp = fopen(e:Cyuyan02.txt, r);/ /* *以只以只读读方式打方式打开开指定文件指定文件* */ / ch = fgetc(fp); ch = fgetc(fp);/ /* *fgetcfgetc函函数带数带回一回一个个字符字符赋给赋给
30、chch* */ / while (ch != EOF) while (ch != EOF)/ /* *当读当读入的字符入的字符值值等于等于EOFEOF时结时结束循束循环环* */ / putchar(ch); putchar(ch);/ /* *将读将读入的字符入的字符输输出在出在屏屏幕幕上上* */ / ch = fgetc(fp); ch = fgetc(fp);/ /* *fgetcfgetc函函数继续带数继续带回一回一个个字字符符赋给赋给chch* */ / printf(n); printf(n); fclose(fp); fclose(fp);/ /* *关闭关闭文件文件* */
31、 / 写字符串函数写字符串函数fputs函数函数写字符串函数写字符串函数fputsfputs函数函数#include#include#include#includemain()main() FILE FILE * *fp;fp;char filename30,str30;char filename30,str30;/ /* *定定义两个义两个字符型字符型数组数组* */ /printf(printf(请输请输入文件路入文件路径径:n);:n);scanf(%s,filename);scanf(%s,filename);/ /* *输输入文件名入文件名* */ /if(fp=fopen(file
32、name,w)=NULL)if(fp=fopen(filename,w)=NULL)/ /* *判判断断文件是否打文件是否打开开失失败败* */ / printf(printf(不能打不能打开开的文件的文件!npress any key to continue:n);!npress any key to continue:n);getchar();getchar();exit(0);exit(0); printf(printf(请输请输入字符串入字符串:n);:n);/ /* *提示提示输输入字入字符串符串* */ /getchar();getchar();gets(str);gets(str
33、);fputs(str,fp);fputs(str,fp);/ /* *将将字符串字符串写写入入fpfp所指向的文件中所指向的文件中* */ /fclose(fp);fclose(fp);return 0;return 0; 读字符串函数读字符串函数fgets函数函数 读字符串函数读字符串函数fgetsfgets函数函数 #include#include#include#includemain()main() FILE FILE * *fp;fp;char filename100,str100;char filename100,str100;/ /* *定定义两个义两个字符型字符型数组数组*
34、*/ /printf(printf(请输请输入文件路入文件路径径:n);:n);scanf(%s,filename);scanf(%s,filename);/ /* *输输入文件名入文件名* */ /if(fp=fopen(filename,r)=NULL)if(fp=fopen(filename,r)=NULL)/ /* *判判断断文件是否打文件是否打开开失失败败* */ / printf(printf(不能打不能打开开的文件的文件!npress any key to continuen);!npress any key to continuen);getchar();getchar();e
35、xit(0);exit(0); fgets(str,sizeof(str),fp);fgets(str,sizeof(str),fp);/ /* *读读取磁取磁盘盘文件中的文件中的内内容容* */ /printf(%s,str);printf(%s,str);printf(n);printf(n);fclose(fp);fclose(fp);return 0;return 0; 格式化写入函数格式化写入函数fprintf函数函数 格式化写入函数格式化写入函数fprintffprintf函数函数 #include#include#include#includemain()main() FILE
36、FILE * *fp;fp;int i=107;int i=107;char filename30;char filename30;/ /* *定定义义一一个个字符型字符型数组数组* */ /printf(printf(请输请输入文件路入文件路径径:n);:n);scanf(%s,filename);/scanf(%s,filename);/* *输输入文件名入文件名* */ /if(fp=fopen(filename,w)=NULL)if(fp=fopen(filename,w)=NULL)/ /* *判判断断文件是否打文件是否打开开失失败败* */ / printf(printf(不能打不
37、能打开开的文件的文件!npress any key to continuen);!npress any key to continuen);getchar();getchar();exit(0);exit(0); fprintf(fp,%c,i);fprintf(fp,%c,i);/ /* *将将9797以字符形式以字符形式写写入入fpfp所指的磁所指的磁盘盘文件中文件中* */ /fclose(fp);fclose(fp);return 0;return 0; 格式化读取函数格式化读取函数fscanf函数函数 格式化读取函数格式化读取函数fscanffscanf函数函数 #include#i
38、nclude#include#includemain()main() FILE FILE * *fp;fp;char i,j;char i,j;char filename30;char filename30;/ /* *定定义义一一个个字符型字符型数组数组* */ /printf(printf(请输请输入文件路入文件路径径:n);:n);scanf(%s,filename);scanf(%s,filename);/ /* *输输入文件名入文件名* */ /if(fp=fopen(filename,r)=NULL)if(fp=fopen(filename,r)=NULL)/ /* *判判断断文件
39、是否打文件是否打开开失失败败* */ / printf(printf(不能打不能打开开的文件的文件!npress any key to continuen);!npress any key to continuen);getchar();getchar();exit(0);exit(0); for(i=0;i5;i+)for(i=0;i5;i+) fscanf(fp,%c,&j);fscanf(fp,%c,&j);printf(%d is:%5dn,i+1,j);printf(%d is:%5dn,i+1,j); fclose(fp);fclose(fp);return 0;return 0;
40、 数据块读写函数数据块读写函数fread函数和函数和fwrite函数函数 数据块读写函数数据块读写函数freadfread函数和函数和fwritefwrite函数函数 #include #include #include#includestruct address_liststruct address_list/ /* *定定义结构义结构体存体存储学储学生成生成绩绩信息信息* */ / char name10; char name10; char adr20; char adr20; char tel15; char tel15; info100; info100;void save(char
41、 void save(char * *name, int n)name, int n)/ /* *自定自定义义函函数数savesave* */ / FILE FILE * *fp;fp;/ /* *定定义义一一个个指向指向FILEFILE类类型型结构结构体的指体的指针变针变量量* */ / int i; int i; if (fp = fopen(name, wb) = NULL) if (fp = fopen(name, wb) = NULL)/ /* *以只以只写写方式打方式打开开指定文件指定文件* */ / printf(cannot open filen); printf(cannot
42、 open filen); exit(0); exit(0); for (i = 0; i n; i+) for (i = 0; i n; i+) if(fwrite(&infoi,sizeof(struct address_list),1,fp)!=1) if(fwrite(&infoi,sizeof(struct address_list),1,fp)!=1)/ /* *将将一一组数组数据据输输出到出到fpfp所指的文件中所指的文件中* */ / printf(file write errorn); printf(file write errorn);/ /* *如果如果写写入文件不成功,
43、入文件不成功,则则输输出出错误错误* */ / 数据块读写函数数据块读写函数fread函数和函数和fwrite函数函数fclose(fp);fclose(fp);/ /* *关闭关闭文件文件* */ / void show(char void show(char * *name, int n)name, int n)/ /* *自定自定义义函函数数showshow* */ / int i; int i; FILE FILE * *fp;fp;/ /* *定定义义一一个个指向指向FILEFILE类类型型结构结构体的指体的指针变针变量量* */ / if (fp = fopen(name, rb)
44、 = NULL) if (fp = fopen(name, rb) = NULL)/ /* *以只以只读读方式方式打打开开指定文件指定文件* */ / printf( printf(不能打不能打开开的文件的文件!n);!n); exit(0); exit(0); for (i = 0; i n; i+) for (i = 0; i n; i+) fread(&infoi, sizeof(struct address_list), 1, fp); fread(&infoi, sizeof(struct address_list), 1, fp);/ /* *从从fpfp所指向的文件所指向的文件读
45、读入入数数据存到据存到数组数组scorescore中中* */ / printf(%15s%20s%20sn, , infoi.adr,infoi.tel); printf(%15s%20s%20sn, , infoi.adr,infoi.tel); fclose(fp); fclose(fp);/ /* *以只以只写写方式打方式打开开指定文件指定文件* */ / 数据块读写函数数据块读写函数fread函数和函数和fwrite函数函数main()main() int i, n; int i, n;/ /* *变变量量类类型型为为基本整型基本整型* */
46、/ char filename50; char filename50;/ /* *数组为数组为字符型字符型* */ / printf( printf(有多少有多少学学生生?n);?n); scanf(%d, &n); scanf(%d, &n);/ /* *输输入入学学生生数数* */ / printf( printf(请输请输入文件路入文件路径径及名及名称称:n);:n); scanf(%s, filename); scanf(%s, filename);/ /* *输输入文件所在路入文件所在路径径及名及名称称* */ / printf( printf(请输请输入入学学生的姓名、地址、生的姓名、地址、电话电话:n);:n); for (i = 0; i n; i+) for (i = 0; i n; i+)/ /* *输输入入学学生成生成绩绩信息信息* */ / printf(NO%dn, i + 1); printf(NO%dn, i +
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 战略练习测试题附答案
- 2025年吉安职业技术学院单招职业倾向性测试题库及答案1套
- 科技在生产安全事故调查中的应用
- 2025年广东省安全员B证考试题库
- 2025年黑龙江省黑河市单招职业适应性测试题库1套
- 村级装修合同范本
- 续签理财合同范本
- 2025年嘉兴南湖学院单招职业适应性测试题库新版
- 科技赋能下的老年人职业生涯再启航计划
- 计算机网络(视频课)知到智慧树章节测试课后答案2024年秋海南热带海洋学院
- 民政局离婚协议书模板(8篇)
- 气管镜科室讲课ppt课件(PPT 69页)
- 对于二氧化碳传感器的现状及发展趋势的浅分析
- 麦语言函数手册参考模板
- 冷库喷涂施工工艺(详细)
- 电机学辜承林(第三版)第1章
- 知情同意书-北京大学肿瘤医院
- 建筑材料碳排放因子查询表
- 观音神课三十二卦
- 医疗机构停业(歇业)申请书
- 发票(商业发票)格式
评论
0/150
提交评论