欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C语言程序设计 第8章文件.pptx

    • 资源ID:2917563       资源大小:752.94KB        全文页数:51页
    • 资源格式: PPTX        下载积分:25金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要25金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言程序设计 第8章文件.pptx

    第8章文件,C语言程序设计,8.1文件概述,1.文件的概念文件是指一组相关信息的集合。文件通常是驻留在外部介质(如磁盘等)上的,在使用时才调入内存中。从用户的角度看,文件可分为普通文件和设备文件两种。普通文件是指驻留在磁盘或其他外部介质上的一个有序数据集,可以是源文件、目标文件、可执行程序;也可以是一组待输入处理的原始数据,或者是一组输出的结果。对于源文件、目标文件、可执行程序可以称作程序文件,对输入/输出数据可称作数据文件。,8.1文件概述,设备文件是指与主机相连的各种外部设备,如显示器、打印机、键盘等。在操作系统中,把外部设备也看作是一个文件来进行管理,把它们的输入/输出等同于对磁盘文件的读/写。通常把显示器定义为标准输出文件,一般情况下在屏幕上显示有关信息就是向标准输出文件输出。如printf(),putchar()输出函数。键盘通常被指定标准的输入文件,从键盘上输入就意味着从标准输入文件上输入数据。如scanf(),getchar()输入函数。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入/输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。因此把这种文件称作为“流式文件”。本章讨论流式文件的打开、关闭、读、写、定位等各种操作。,8.1文件概述,2.缓冲文件系统相对于内存储器而言,磁盘是慢速设备。在C语言的文件操作中,如果每次向磁盘写入或读出一个字节的数据都启动磁盘操作,将会大大降低系统的效率,而且还会对磁盘驱动器的使用寿命带来不利影响。为此,C程序对文件的处理一般采用缓冲文件系统的方式进行。所谓缓冲文件系统是程序打开一个文件的同时,系统自动地在内存中为该文件开辟一个内存缓冲区,C程序对文件的所有操作都通过对文件缓冲区的操作来完成。,8.1文件概述,当从内存向磁盘输出数据时,必须先把内存中的数据送到缓冲区,待数据装满缓冲区,再由操作系统把缓冲区的数据一起写入磁盘;从磁盘向内存读入数据时,先由操作系统把一批数据送入内存缓冲区,待装满缓冲区后,内存再从缓冲区中根据程序运行需要逐个读入内存。使用缓冲文件系统可以大大提高文件操作的速度。如果一个程序同时打开多个文件,那么系统自动地在内存中为这几个文件开辟各自的内存缓冲区并编上相应的号码,分别进行操作而互不干扰。缓冲文件系统示意图如图8-1-1所示。,8.1文件概述,8.1文件概述,3.文件类型指针在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。定义文件指针的一般形式如下:FILE*指针变量标识符;其中,FILE应为大写,它实际上是由系统定义的一个结构,该结构中含有文件名、文件状态和文件当前位置等信息。如“FILE*fp;”表示fp是指向FILE结构的指针变量,通过fp即可找到存放某个文件信息的结构变量,然后按结构变量提供的信息找到该文件,实施对文件的操作。,8.2文件的打开与关闭,文件在进行读写操作之前要先打开,使用完毕要关闭。所谓打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文件,以便进行其他操作。关闭文件则断开指针与文件之间的联系,也就禁止再对该文件进行操作。1.文件打开函数fopen()fopen()函数用来打开一个文件,其调用的一般形式如下:文件指针名=fopen(文件名,使用文件方式)其中,“文件指针名”必须是被说明为FILE类型的指针变量,“文件名”是被打开文件的文件名,是字符串常量或字符串变量。“使用文件方式”是指文件的类型和操作要求。例如:,8.2文件的打开与关闭,FILE*fp;fp=(file1,r);它的意义是在当前目录下打开文件“file1”,只允许进行“读”操作,并使fp指向该文件。例如:FILE*fphzk;fphzk=(d:datafiletxt,r);它的意义是打开D驱动器磁盘的根目录下的文本文件“datafiletxt”,并允许进行读操作。两个反斜线“”中的第一个表示转义字符,第二个表示根目录。,8.2文件的打开与关闭,C语言文件操作方式共有12种,见表8-2-1。,8.2文件的打开与关闭,注意:文件使用方式由“r”“w”“a”“t”“b”“+”六个字符拼成,各字符的含义如下:r(read):读w(write):写a(append):追加t(text):文本文件,可省略不写b(banary):二进制文件+:读和写用“r”方式打开的文件只能用于向计算机输入而不能用作向该文件输出数据,而且该文件应该已经存在,并存有数据。不能用“r”方式打开一个并不存在的文件,否则出错。,8.2文件的打开与关闭,用“w”方式打开的文件只能向该文件写入,而不能用来向计算机输入。若打开的文件不存在,则以指定的文件名建立该文件;若打开的文件已经存在,则将该文件删去,重建一个新文件。若要向一个已存在的文件追加新的信息,只能用“a”方式打开文件。但此时该文件必须是存在的,否则将会出错。在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用来判别是否完成打开文件的工作,并作相应的处理。因此常用以下程序段打开文件:,8.2文件的打开与关闭,此段程序代码的含义是如果返回的指针为空,表示不能打开D盘根目录下的“datafiletxt”文件,则给出提示信息“erroronopend:datafiletxtfile!”,exit()函数的作用是关闭所有文件,终止正在执行的程序,待用户检查出错误,修改后重新运行。,8.2文件的打开与关闭,用“r+”“w+”和“a+”方式打开的文件既可以用来输入数据,也可以用来输出数据。用“r+”方式时该文件应该已经存在,以便计算机从中读取数据;用“w+”方式时则新建一个文件,先向此文件写数据,然后可以读此文件中的数据;用“a+”方式打开的文件,原来的文件不被删除,文件的读写标志移到文件末尾,可以添加也可以读出。把一个文本文件读入内存时,要将ASCII码转换成二进制码,而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码,因此文本文件的读写要花费较多的转换时间。对二进制文件的读写不存在这种转换。,8.2文件的打开与关闭,对磁盘文件,在使用前一定要打开,而对于计算机的外部设备,如键盘和显示器,尽管也是作为设备文件来处理,但以前的应用中并未用到“打开文件”的操作。这是因为当运行一个C程序时,系统自动打开三个设备文件:标准输入、标准输出和标准出错输出。并且系统已自动定义了三个文件类型指针stdin、stdout和stderr,分别指向标准输入(键盘)、标准输出(屏幕)和标准出错输出(屏幕)。用户在使用这些设备时,不必再进行打开或关闭,它们由C编译系统自动完成,用户可以直接使用。,8.2文件的打开与关闭,2.文件关闭函数fclose()文件一旦使用完毕,应用关闭文件函数把文件关闭,以避免文件的数据丢失等错误。fclose()函数调用的一般形式如下:fclose(文件指针);例如“fclose(fp);”,正常完成关闭文件操作时,fclose()函数的返回值为0。若返回非零值,则表示有错误发生。,8.3文件的读写,在C语言中,scanf()和printf()函数是针对键盘输入和屏幕输出的标准函数。同时,C语言也为磁盘数据文件的读写提供了四种文件存取方法。1.字符的输入和输出字符读写函数是以字符(字节)为单位的读写函数。每次可从文件读出或向文件写入一个字符。(1)读字符函数fgetc()fgetc()函数的功能是从指定的文件中读一个字符,函数调用的形式如下:字符变量=fgetc(文件指针);例如“ch=fgetc(fp);”表示从打开的文件fp中读取一个字符并送入ch中。,注意:在fgetc()函数调用中,读取的文件必须是以读或读写方式打开的。读取字符的结果也可以不向字符变量赋值。例如“fgetc(fp);”此时读出的字符不能保存。在文件内部有一个位置指针,用来指向文件的当前读写字节。在文件打开时,该指针总是指向文件的第一个字节。使用fgetc()函数后,该位置指针将向后移动一个字节。因此可连续多次使用fgetc()函数,读取多个字符。应注意文件指针和文件内部的位置指针的区别。文件指针是指向整个文件的,需在程序中定义说明,只要不重新赋值,文件指针的值是不变的。文件内部的位置指针用以指向文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。,8.3文件的读写,【例8.3.1】读入文件“mm.c”,在屏幕上输出。,8.3文件的读写,8.3文件的读写,程序运行结果:,8.3文件的读写,【分析】本例可以定义文件指针fp,以读文本文件方式打开文件“mm.c”,并使fp指向该文件。如果打开文件出错,给出提示并退出程序。程序先读出一个字符,然后进入循环,只要读出的字符不是文件结束标志(每个文件末有一结束标志EOF)就把该字符显示在屏幕上,再读入下一字符。每读一次,文件内部的位置指针向后移动一个字符,文件结束时,该指针指向EOF。从而可将整个文件内容显示在屏幕上。(2)写字符函数fputc()fputc()函数的功能是把一个字符写入指定的文件中,函数调用的形式如下:fputc(字符量,文件指针);,8.3文件的读写,其中,待写入的字符量可以是字符常量或变量,例如“fputc(a,fp);”,其意义是把字符a写入fp所指向的文件中。注意:被写入的文件可以用写、读写,追加方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容,写入字符从文件首开始。如需保留原有文件内容,希望写入的字符在文件末开始存放,必须以追加方式打开文件。被写入的文件若不存在,则创建该文件。每写入一个字符,文件内部位置指针向后移动一个字节。fputc()函数有一个返回值。若写入成功,则返回写入的字符;否则返回一个EOF。可用此来判断写入是否成功。,8.3文件的读写,【例8.3.2】从键盘输入一行字符,写入一个文件,再把该文件内容读出显示在屏幕上。,8.3文件的读写,8.3文件的读写,程序运行结果:请输入一个字符串:CprogramCprogram,8.3文件的读写,【分析】程序中首先以读写文本文件方式打开文件“string.txt”,然后从键盘读入一个字符后进入循环,当读入字符不为回车符时,则把该字符写入文件之中,然后继续从键盘读入下一字符。每输入一个字符,文件内部位置指针向后移动一个字节。写入完毕,该指针已指向文件末。若要把文件从头读出,须把指针移向文件头,可以利用rewind()函数用于把fp所指文件的内部位置指针移到文件头。最后读出文件中的内容。,8.3文件的读写,2.字符串的输入和输出字符串读写函数只能对文本文件进行读写,读写文件时一次读取或写入的是字符串。(1)fgets()函数fgets()函数用来从文本文件中读取一个字符串,调用格式如下:fgets(s,n,fp)其中,s是字符型指针变量或字符数组名,n是指定读入的字符个数。调用该函数时,从fp所指向的文件中读取n-1个字符,存入s所指向内存地址起始的n-1个连续的内存单元中。若n-1个字符读入完成之前遇到换行符n或文件结束符EOF,将停止读入(遇到的换行符n也作为一个字符保留到s中,EOF则不,8.3文件的读写,保留),在读取的字符串后面自动添加一个字符串结束标记0。因此字符串s最多占n个字节。该函数若执行成功,返回所读取的字符串;若执行失败,则返回空指针,此时s的内容不确定。(2)fputs()函数fputs()函数用来向指定的文本文件写入一个字符串,调用格式如下:fputs(字符串,文件类型指针);例如“fputs(s,fp);”,其中,s可以是字符串常量、字符型指针变量或字符数组名。该函数把字符串s写入fp所指向的文件时,字符串s的结束标记0不会写入文件。若函数执行成功,则函数返回所写的最后一个字符;否则函数返回EOF。,8.3文件的读写,【例8.3.3】从键盘输入若干字符,并添加到文件“string.txt”中。,8.3文件的读写,程序运行结果:请输入字符串:hello【分析】在本例中,先以追加的方式打开文件“string.txt”,然后从键盘读入一行字符,并将它送入数组s,利用函数fputs()把该字符串以追加的方式写入“string.txt”文件中。,8.3文件的读写,3.按格式输入和输出fscanf()函数和fprintf()函数与scanf()函数和printf()函数的功能相似,都是格式化读写函数。两者的区别在于scanf()是从stdin标准输入设备(键盘)输入,printf()是向stdout标准输出设备(屏幕)输出;而fscanf()和fprintf()则是针对于磁盘文件,fscanf()函数用于从指定文件中按照指定格式读取数据保存到变量,fprintf()函数用于按指定格式向指定文件写入数据。当文件类型指针定义为stdin和stdout时,这两个函数的功能就与scanf()和printf()相同。,8.3文件的读写,函数的调用格式如下:fscanf(文件指针,格式字符串,输入表列);fprintf(文件指针,格式字符串,输出表列);例如:fscanf(fp,%d%s,,8.3文件的读写,【例8.3.4】从键盘输入一个整数到文件中,并从文件中读出一个字符串输出到显示器上。,8.3文件的读写,程序运行结果:请输入一个整数:20输出字符串为:program,8.3文件的读写,【分析】首先以追加的方式打开文本文件“string.txt”,使文件指针fp指向文件结尾;然后输入一个整数i,并利用fprintf()函数将i的值输出到“string.txt”文件末;接着利用fseek()函数将文件指针移到文件第2个字符,利用fscanf()函数将字符串“program”赋值给字符数组m。用fprintf()和fscanf()函数对磁盘文件读写,使用方便,容易理解,但是由于在输入时要将文件中的ASCII码转换为二进制形式保存在内存变量中,在输出时又要将内存中的二进制形式转换为字符,需要花费较多的时间。因此在内存与磁盘频繁交换数据的情况下,最好不用fprintf()和fscanf()函数,可用下面介绍的fread()和fwrite()函数进行二进制的读写。,8.3文件的读写,4.数据块的输入和输出C语言提供了用于整块数据的读写函数fread()和fwrite(),比较适用于随机文件的读写,可用来读写一组数据,如一个数组元素、一个结构变量的值等。读数据块函数调用的一般形式如下:fread(buffer,size,count,fp);写数据块函数调用的一般形式如下:fwrite(buffer,size,count,fp);其中,buffer是一个指针,在fread()函数中,它表示存放输入数据的首地址;在fwrite()函数中,它表示存放输出数据的首地址。,8.3文件的读写,size/*表示数据块的字节数*/count/*表示要读写的数据块块数*/fp/*表示文件指针*/例如“fread(fa,4,5,fp);”,其意义是从fp所指的文件中,每次读4个字节(一个实数)送入实数组fa中,连续读5次,即读5个实数到fa中。,8.3文件的读写,【例8.3.5】从文件中读出字符串送入字符数组。,8.3文件的读写,程序运行结果:请输入一个字符串:computer输出字符串为:Cprogram,【分析】首先以追加方式打开文本文档“string.txt”,然后输入一个字符串并将它写入到“string.txt”,将文件指针定位到文档首位,将字符串“Cprogram”读到字符数组n中,并在屏幕上输出。,8.4文件的定位,移动文件内部位置指针的函数主要有两个,即rewind()函数和fseek()函数。1.rewind()函数rewind()函数的调用形式如下:rewind(fp);该函数用于定位,使文件的位置指针重新返回文件的开头。其中fp是指向某一磁盘文件的文件类型指针。当对某个文件进行读写后,其位置指针指向了文件中间或末尾,如果想回到文件的首地址进行重新读写时,可使用该函数。,8.4文件的定位,2.fseek()函数和随机读写对流式文件可以进行顺序读写,也可以进行随机读写。如果文件中的位置指针按字节顺序移动,就是顺序读写;如果位置指针可以随意移动位置,就可以实现随机读写。fseek()函数就可以改变文件的位置指针。fseek()函数的调用形式如下:fseek(fp,offset,base);其中,fp是文件指针,指向被移动的文件;offset是位移量,表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB时不会出错。当用常量表示位移量时,要求加后缀“L”;base是起始点,表示从何处开始计算位移量,规定的起始点有三种:文件首、当前位置和文件末尾。其表示方法见表8-4-1。,8.4文件的定位,例如“fseek(fp,100L,0);”,其意义是把位置指针移到离文件首的100个字节处。注意:fseek()函数一般用于二进制文件。在文本文件中由于要进行转换,因此往往计算的位置会出现错误。,8.4文件的定位,3.其他函数(1)ftell()函数ftell()函数的调用形式如下:longftell(fp);ftell()函数返回文件位置指示器的当前值,这个值是指示器从文件头开始算的字节数,返回的数为长整型数,当返回-1时,表示出现错误。(2)ferror()函数ferror()函数的调用形式如下:ferror(fp);,8.4文件的定位,它的功能是检查文件在用各种输入/输出函数进行读写时是否出错。若ferror的返回值为0,表示未出错;否则表示出错。(3)clearerr()函数clearerr()函数调用形式如下:clearerr(fp);它的功能是用于清除出错标志和文件结束标志,使它们为0值。,本章主要介绍了文件的概念、文件的打开与关闭、文件的读/写操作。理解文件读写原理,区分ASCII码文件和二进制文件;理解文件指针移动的含义,以达到从不同类型文件中正确读写数据的目的。,本章小结,1.编程:将一个二进制文件file1.dat的内容复制到文件file2.dat中。,习题,2.编程:统计一个文本文件中字母字符、数字字符及其他字符的个数。,习题,3.编程:从键盘输入一串字符(用“”结束输入),存放到一个文本文件中,并统计该串字符的个数并写入文件最后。,习题,4.编程:从键盘输入五名学生的数据(信息包括学号、姓名、成绩),存放到磁盘文件stud1中。,习题,5.编程:从磁盘学生信息文件中,输入学生姓名,查询该学生记录是否存在,并输出相应信息。,习题,谢谢观看THANKYOU,

    注意事项

    本文(C语言程序设计 第8章文件.pptx)为本站会员(小****库)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开