c语言程序设计文件操作题库,C语言程序设计文件操作.doc

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

第8章 文件操作1、 概述1. 概述文件是指存储在外部介质上数据的集合。操作系统是以文件为单位对数据进行管理的。对I/O设备的管理也是看做一个文件,而且都有特殊的名字。如com,lpt,prn,con等。C语言把文件看作是一个字符的序列,即有一个一个字符的数据顺序组成。根据数据的组织形式,可分为ASCII码文件和二进制文件。ASCII码文件又称文本文件,它的每一个字节存放一个ASCII代码,代表一个字符。二进制文件是把内存中的数据按其在内存中的存放形式原样输出到磁盘上存放。如一个整数12345,在内存中占2个字节。按ASCII码形式保存占5个字节,按二进制形式保存只需要2个字节。很显然采用ASCII码的形式便于输出字符,但需占用较多的存储空间;而采用二进制的形式可以节省存储空间,但不能直接输出字符。在C语言中对文件的存取是以字节(字符)为单位的。2. 文件指针每一个被使用的文件都在内存中开辟一个区域,用来存放文件的有关信息。这些信息是保存在一个结构体类型变量中的。该结构体类型的名称为FILE,其定义如下Typedef struct Int _fd;文件号Int _cleft;缓冲区中剩下的字符Int _mode;文件操作模式Char _*_nextc;下一个字符位置Char *_buff;文件缓冲区位置FILE;有了FILE 类型之后,我们就可以用它来定义文件类型的变量、数组和指针。如FILE fp256;定义了一个结构体数组fp,包含256个元素。FILE *fp;定义了一个指向FILE类型结构体的指针变量fp。有了这个定义之后,就可以用它指向一个文件,然后通过它来实现对文件的访问。3. 文件操作对文件的操作无非是文件的打开文件的关闭文件的读文件的写这四个操作。在C语言中使用专门的库函数来完成。1 文件的打开使用函数实现打开文件,而且在调用之前,需先定义一个FILE类型的指针。一般使用格式如下FILE *fp;Fp“文件名”,”打开方式”;通过这一条语句,就使得fp与“文件名”所指定的文件建立起了联系。说明1.文件名必须是文件的全名。2.打开方式如下表所示R只读为输入打开一个文本文件W只写为输出打开一个文本文件A追加向文本文件尾增加数据Rb只读为输入打开一个二进制文件Wb只写为输出打开一个二进制文件Ab追加向二进制文件尾增加数据R读写为读/写打开一个文本文件W读写为读/写建立一个新的文本文件A读写为读/写打开一个文本文件Rb读写为读/写打开一个二进制文件Wb读写为读/写建立一个新的二进制文件Ab读写为读/写打开一个二进制文件在上述列出的打开方式中,并非所有的C语言版本都完全提供。因此在使用时要注意所使用的版本的规定。3. 在使用时,如果打开不成功,将会返回一个错误信息,即空指针值(NULL),在stdio.h文件中被定义为0.造成错误的原因很多用“r”方式打开一个不存在的文件;磁盘出故障;磁盘写保护或已满无法建立新文件等。因此常用下面的方法进行检测。Iffp“lx.doc”,”r”NULLPrintf“can not open this filen”;Exit0;2、 文件的关闭在使用完一个文件之后,要养成关闭文件的习惯,否则将会造成数据丢失。因为在向文件写数据时,是先将数据输出到缓冲区,待缓冲区满后才正式输出到外存中的文件。如果当数据未充满缓冲区而程序结束运行,就会将缓冲区中的数据丢失。在C语言中使用fclose函数来关闭文件。其含义就是切断文件指针和文件之间的联系。Fclose函数也有返回值当成功地执行了关闭操作时,返回值为0,如果返回值为非0值,则表示关闭时有错误。3、 文件的读写当一个文件打开之后,就可以对它进行读写(又称之为访问)了。常用的函数如下1. fgetc()和fputc(或者putc()和getc(Fputc()把一个字符写到磁盘文件上去。一般使用形式为fputcch,fp;其中ch要输出的字符变量 Fp已定义的文件指针当fputc()返回EOF(即-1)时,表明输出失败;否则返回要输出的字符。Fgetc()从指定的文件中读入一个字符。一般使用形式为chfgetcfp;其中ch已定义的字符变量Fp已定义的文件指针当使用fgetc()顺序地读一个文件时,最终会碰到文件结束符。此时,该函数会返回一个文件结束标志EOF(即-1)。在实际应用中通常是使用feof()函数来进行测试是否到了文件末尾。如while(feoffp)Chfgetcfp;Putcharch;应用举例用C语言编程实现操作系统中的文件复制命令。Copy源文件名 目标文件名include stdio.hMainargc,argvChar ch;Ifargc3Printf“please enter file namen”;Exit0;Ifinargv1,”r”NULLprintf“source file is not existn”;Exit0;ifoutargv2,”w”NULL printf“ target file can not createn”; exit0; whilefeofin chfgetcin; fputcch,out; fclosein;fcloseout;2. fread函数和fwrite函数Fread()函数和fwrite()函数是用来实现读写一个数据块。它们的一般使用格式为Fread(buffer,size,count,fp);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和fwrite函数一般用于二进制文件的输入和输出。因为它们是按数据块的长度来处理输入输出的,在字符发生转换的情况下很可能出现与原设想的情况不同。举例编程实现某班40个学生成绩数据库管理的程序。假设学生的信息包含如下字段姓名、学号,班级,C语言、组成原理、高数、线代。include stdio.h 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 c zcyl gaoshu xiandain”; fori0;iSIZE;i scanf“sddffff”,studi.name,studi.num,studi.class, studi.cyy,studi.zcyl,studi.gs,studi.xd;void saveFILE *fp;int i;if fp“list.txt”,”wb”NULL printf“cannot create list filen”; exit0;for i0;iSIZE;i if fwritestudi,sizeofstruct student,1,fp1 printf“file write errorn”;void disp FILE *fp; int i;if fp“list.txt”,”rb”NULL printf“cannot open list filen”; return; for i0;iSIZE;i if freadstudi,sizeofstruct student,1,fp1 if feoffpreturn ; printf“file read errorn”; else printf“-10s5d5d5.1f5.1f5.1f5.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);读入一个整型数据和一个单精度型数据分别赋给变量i和x。值得注意的是使用这两个函数读写文件时要进行ASCII码和二进制形式之间的转换,从而导致花费的时间较多。4. putw和getw是用来对磁盘文件读写一个字或整数。如putw(10,fp);ngetw(fp);5. fgets()和()是用来对磁盘文件读写一个字符串。使用格式如下fgets(str,n,fp);从指向的文件读入n-1个字符,并把它放到字符数组str中,而且自动在最后加一个字符串结束标志0。在读入的过程中如果碰到换行符或EOF,读入结束。(字符串常量/字符数组名/字符指针,文件指针);“name sex age addr Tel ”,fp;输出成功,函数值为0,否则为非零值。4、 文件指针的定位1. rewind(文件指针);是文件的位置指针返回到文件的开头。Rewindfp;2. fseek(文件指针,位移量,起始点);其中“起始点”为下列三个常量的一个。SEEK_SET文件开头(0)SEEK_CUR当前位置(1)SEEK_END文件末尾(2)“位移量”是指相对于七点向前或向后移动的字节数。Fseek(fp,100L,SEEK_SET);Fseek(fp,10L,SEEK_CUR);Fseek(fp,-50L,SEEK_END);3. ftell()测试文件位置指针当前的位置。其返回值是相对于文件开头的偏移量来表示的。Iftell(fp);2、 文件指针3、 文件操作

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值