C语言程序设计-文件操作.doc

上传人:自*** 文档编号:126219287 上传时间:2020-03-23 格式:DOC 页数:6 大小:58KB
返回 下载 相关 举报
C语言程序设计-文件操作.doc_第1页
第1页 / 共6页
C语言程序设计-文件操作.doc_第2页
第2页 / 共6页
C语言程序设计-文件操作.doc_第3页
第3页 / 共6页
C语言程序设计-文件操作.doc_第4页
第4页 / 共6页
C语言程序设计-文件操作.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《C语言程序设计-文件操作.doc》由会员分享,可在线阅读,更多相关《C语言程序设计-文件操作.doc(6页珍藏版)》请在金锄头文库上搜索。

1、第8章 文件操作1、 概述1. 概述文件是指存储在外部介质上数据的集合。操作系统是以文件为单位对数据进行管理的。对I/O设备的管理也是看做一个文件,而且都有特殊的名字。如com,lpt,prn,con等。C语言把文件看作是一个字符的序列,即有一个一个字符的数据顺序组成。根据数据的组织形式,可分为ASCII码文件和二进制文件。ASCII码文件又称文本文件,它的每一个字节存放一个ASCII代码,代表一个字符。二进制文件是把内存中的数据按其在内存中的存放形式原样输出到磁盘上存放。如:一个整数12345,在内存中占2个字节。按ASCII码形式保存占5个字节,按二进制形式保存只需要2个字节。很显然采用A

2、SCII码的形式便于输出字符,但需占用较多的存储空间;而采用二进制的形式可以节省存储空间,但不能直接输出字符。在C语言中对文件的存取是以字节(字符)为单位的。2. 文件指针每一个被使用的文件都在内存中开辟一个区域,用来存放文件的有关信息。这些信息是保存在一个结构体类型变量中的。该结构体类型的名称为FILE,其定义如下:Typedef struct Int _fd;文件号Int _cleft;缓冲区中剩下的字符Int _mode;文件操作模式Char _*_nextc;下一个字符位置Char *_buff;文件缓冲区位置FILE;有了FILE 类型之后,我们就可以用它来定义文件类型的变量、数组和

3、指针。如:FILE fp256;定义了一个结构体数组fp,包含256个元素。FILE *fp;定义了一个指向FILE类型结构体的指针变量fp。有了这个定义之后,就可以用它指向一个文件,然后通过它来实现对文件的访问。3. 文件操作对文件的操作无非是:文件的打开文件的关闭文件的读文件的写这四个操作。在C语言中使用专门的库函数来完成。(1) 文件的打开使用fopen()函数实现打开文件,而且在调用fopen()之前,需先定义一个FILE类型的指针。一般使用格式如下:FILE *fp;Fp=fopen(“文件名”,”打开方式”);通过这一条语句,就使得fp与“文件名”所指定的文件建立起了联系。说明:1

4、.文件名必须是文件的全名。2.打开方式如下表所示:R只读为输入打开一个文本文件W只写为输出打开一个文本文件A追加向文本文件尾增加数据Rb只读为输入打开一个二进制文件Wb只写为输出打开一个二进制文件Ab追加向二进制文件尾增加数据R+读写为读/写打开一个文本文件W+读写为读/写建立一个新的文本文件A+读写为读/写打开一个文本文件Rb+读写为读/写打开一个二进制文件Wb+读写为读/写建立一个新的二进制文件Ab+读写为读/写打开一个二进制文件在上述列出的打开方式中,并非所有的C语言版本都完全提供。因此在使用时要注意所使用的版本的规定。3. 在使用fopen()时,如果打开不成功,将会返回一个错误信息,

5、即空指针值(NULL),在stdio.h文件中被定义为0.造成错误的原因很多:用“r”方式打开一个不存在的文件;磁盘出故障;磁盘写保护或已满无法建立新文件等。因此常用下面的方法进行检测。If(fp=fopen(“lx.doc”,”r”)=NULL)Printf(“can not open this file!n”);Exit(0);2、 文件的关闭在使用完一个文件之后,要养成关闭文件的习惯,否则将会造成数据丢失。因为在向文件写数据时,是先将数据输出到缓冲区,待缓冲区满后才正式输出到外存中的文件。如果当数据未充满缓冲区而程序结束运行,就会将缓冲区中的数据丢失。在C语言中使用fclose()函数来

6、关闭文件。其含义就是切断文件指针和文件之间的联系。Fclose()函数也有返回值:当成功地执行了关闭操作时,返回值为0,如果返回值为非0值,则表示关闭时有错误。3、 文件的读写当一个文件打开之后,就可以对它进行读写(又称之为访问)了。常用的函数如下:1. fgetc()和fputc(或者putc()和getc()Fputc():把一个字符写到磁盘文件上去。一般使用形式为:fputc(ch,fp);其中:ch要输出的字符变量 Fp已定义的文件指针当fputc()返回EOF(即-1)时,表明输出失败;否则返回要输出的字符。Fgetc():从指定的文件中读入一个字符。一般使用形式为:ch=fgetc

7、(fp);其中ch已定义的字符变量Fp已定义的文件指针当使用fgetc()顺序地读一个文件时,最终会碰到文件结束符。此时,该函数会返回一个文件结束标志EOF(即-1)。在实际应用中通常是使用feof()函数来进行测试是否到了文件末尾。如:while(!feof(fp))Ch=fgetc(fp);Putchar(ch);应用举例:用C语言编程实现操作系统中的文件复制命令。Copy源文件名 目标文件名#include Main(argc,argv)Char ch;If(argc!=3)Printf(“please enter file name!n”);Exit(0);If(in=fopen(ar

8、gv1,”r”)=NULL)printf(“source file is not existn”);Exit(0);if(out=fopen(argv2,”w”)=NULL) printf(“ target file can not createn”); exit(0); while(!feof(in) ch=fgetc(in); fputc(ch,out); fclose(in);fclose(out);2. fread()函数和fwrite()函数Fread()函数和fwrite()函数是用来实现读写一个数据块。它们的一般使用格式为:Fread(buffer,size,count,fp);

9、Fwrite(buffer,size,count,fp);其中:Buffer:是一个指针。对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址(以上指起始地址)。Size:要读写的字节数。Count:要进行读写多少个size字节的数据。(即多少次)Fp:文件型指针。如果文件以二进制形式打开,用fread和fwrite函数就可以读写任何类型的信息。如fread(f,4,2,fp);其中f是一个实型数组名。一个实型变量占4个字节。Fread(f,4,2,fp);的意义就是从fp所指向的文件读入两次(每次4个字节)的数据,存储到数组f中。值得注意的是:fread和fwri

10、te函数一般用于二进制文件的输入和输出。因为它们是按数据块的长度来处理输入输出的,在字符发生转换的情况下很可能出现与原设想的情况不同。举例:编程实现某班40个学生成绩数据库管理的程序。假设学生的信息包含如下字段:姓名、学号,班级,C语言、组成原理、高数、线代。#include #define SIZE 40 struct student char name10; int num; int class; flaot cyy; flaot zcyl; float gs; float xd; studSIZE;void read() int i; printf(“ name xuehao banji

11、 c zcyl gaoshu xiandain”); for(i=0;iSIZE;i+) scanf(“%s%d%d%f%f%f%f”,studi.name,&studi.num,&studi.class, studi.cyy,studi.zcyl,studi.gs,studi.xd);void save()FILE *fp;int i;if (fp=fopen(“list.txt”,”wb”)=NULL) printf(“cannot create list file!n”); exit(0);for (i=0;iSIZE;i+) if (fwrite(&studi,sizeof(struc

12、t student),1,fp)!=1) printf(“file write error!n”);void disp() FILE *fp; int i;if (fp=fopen(“list.txt”,”rb”)=NULL) printf(“cannot open list file!n”); return; for (i=0;iSIZE;i+) if (fread(&studi,sizeof(struct student),1,fp)!=1) if (feof(fp)return ; printf(“file read error!n”); else printf(“%-10s%5d%5d

13、%5.1f%5.1f%5.1f%5.1fn”,studi.name, studi.num,studi.class,studi.cyy,studi.zcyl,studi.gs,studi.xd); main() read(); save(); disp(); 3. fprintf()和fscanf()格式化读写文件的函数。其使用格式如下:Fprintf(文件指针,格式字符串,输出项列表);Fscanf(文件指针,格式字符串,输入项列表);如:fprintf(fp,“%d,%f”,i,x);将变量i和x的值分别按整型和单精度型写入fp所指向的文件。Fscanf(fp,“%d,%f”,&i,&x);

14、读入一个整型数据和一个单精度型数据分别赋给变量i和x。值得注意的是:使用这两个函数读写文件时要进行ASCII码和二进制形式之间的转换,从而导致花费的时间较多。4. putw()和getw:是用来对磁盘文件读写一个字或整数。如:putw(10,fp);n=getw(fp);5. fgets()和fputs():是用来对磁盘文件读写一个字符串。使用格式如下:fgets(str,n,fp);从指向的文件读入n-1个字符,并把它放到字符数组str中,而且自动在最后加一个字符串结束标志0。在读入的过程中如果碰到换行符或EOF,读入结束。Fputs(字符串常量/字符数组名/字符指针,文件指针);Fputs(“name sex age addr Tel ”,fp);输出成功,函数值为0,否则为非零值。4、 文件指针的定位1. rewin

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

当前位置:首页 > IT计算机/网络 > 其它相关文档

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