为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

第10章利用文件保存数据

2013-06-25 50页 ppt 907KB 9阅读

用户头像

is_892378

暂无简介

举报
第10章利用文件保存数据null第10章 利用文件保存数据10.1 C文件的有关概念 10.2 文件的打开与关闭 10.3 文件的顺序读写 10.4 文件的随机读写 10.5 提高部分第10章 利用文件保存数据P27510.1 C文件的有关概念10.1 C文件的有关概念10.1.1 什么是文件 10.1.2 文件名 10.1.3 文件的分类 10.1.4 文件缓冲区 10.1.5 文件指针P27510.1.1 什么是文件10.1.1 什么是文件P275文件有不同的类型,在程序设计中,主要用到两种文件: (1) 程序文件。包括源程序文件(后缀为.c)、...
第10章利用文件保存数据
null第10章 利用文件保存数据10.1 C文件的有关概念 10.2 文件的打开与关闭 10.3 文件的顺序读写 10.4 文件的随机读写 10.5 提高部分第10章 利用文件保存数据P27510.1 C文件的有关概念10.1 C文件的有关概念10.1.1 什么是文件 10.1.2 文件名 10.1.3 文件的分类 10.1.4 文件缓冲区 10.1.5 文件指针P27510.1.1 什么是文件10.1.1 什么是文件P275文件有不同的类型,在程序设计中,主要用到两种文件: (1) 程序文件。包括源程序文件(后缀为.c)、目标文件(后缀为.obj)、可执行文件(后缀为.exe)等。这种文件的内容是程序代码。10.1.1 什么是文件10.1.1 什么是文件P275文件有不同的类型,在程序设计中,主要用到两种文件: (2) 数据文件。文件的内容不是程序,而是供程序运行时读写的数据,如在程序运行过程中输出到磁盘(或其他外部设备)的数据,或在程序运行过程中供读入的数据。如一批学生的成绩数据,或货物交易的数据等。 本章主要讨论的是数据文件10.1.1 什么是文件10.1.1 什么是文件P275在以前各章中所处理的数据的输入和输出,从终端的键盘输入数据,运行结果输出到终端显示器上 常常需要将一些数据输出到磁盘上保存起来,以后使用 这就要用到磁盘文件10.1.1 什么是文件10.1.1 什么是文件P275操作系统把各种设备都统一作为文件处理 从操作系统的角度看,每一个与主机相联的输入输出设备都看作是文件。例如, 终端键盘是输入文件 显示屏和打印机是输出文件10.1.1 什么是文件10.1.1 什么是文件P275“文件”指存储在外部介质上数据的集合 一批数据是以文件的形式存放在外部介质上的 操作系统是以文件为单位对数据进行管理 想找存放在外部介质上的数据,先按文件名找到所指定的文件,然后再从该文件读数据 要向外部介质上存储数据也必须先建立一个文件(以文件名作为标志),才能向它输出数据10.1.1 什么是文件10.1.1 什么是文件P275输入输出是数据传送的过程,数据如流水一样从一处流向另一处,因此常将输入输出形象地称为流(stream),即数据流。流示了信息从源到目的端的流动。 输入操作时,数据从文件流向计算机内存 输出操作时,数据从计算机流向文件10.1.1 什么是文件10.1.1 什么是文件P275C语言把文件看作是一个字符(或字节)的序列。一个输入输出流就是一个字符流或字节(内容为二进制数据)流。10.1.1 什么是文件10.1.1 什么是文件P275C的数据文件由一连串的字符(或字节)组成,中间没有分隔符,对文件的存取是以字符(字节)为单位的,允许对文件存取一个字符。输入输出数据流的开始和结束仅受程序控制而不受物理符号(如回车换行符)控制,这就增加了处理的灵活性。这种文件称为“流式文件”。10.1.2 文件名10.1.2 文件名P276文件要有一个唯一的文件标识,以便用户识别和引用。 文件标识包括3部分: (1)文件路径 (2)文件名主干 (3)文件后缀10.1.2 文件名10.1.2 文件名P276文件路径表示文件在外部存储设备中的位置。如: d: \cc\temp\file1.dat 表示file1.dat文件存放在d盘中的cc目录下的temp子目录下面文件路径文件名主干文件后缀10.1.2 文件名10.1.2 文件名P276文件路径表示文件在外部存储设备中的位置。如: d: \cc\temp\file1.dat 表示file1.dat文件存放在d盘中的cc目录下的temp子目录下面文件名10.1.2 文件名10.1.2 文件名P276文件路径表示文件在外部存储设备中的位置。如: d: \cc\temp\file1.dat 表示file1.dat文件存放在d盘中的cc目录下的temp子目录下面命名规则遵循标识符的命名规则10.1.2 文件名10.1.2 文件名P276文件路径表示文件在外部存储设备中的位置。如: d: \cc\temp\file1.dat 表示file1.dat文件存放在d盘中的cc目录下的temp子目录下面一般不超过3个字母(doc、txt、dat、c、cpp、obj、exe、、bmp等)10.1.3 文件的分类10.1.3 文件的分类P276根据数据的组织形式,数据文件可分为ASCII文件和二进制文件。 数据在内存中是以二进制形式存储的,如果不加转换地输出到外存,就是二进制文件 如果要求在外存上以ASCII代码形式存储,则需要在存储前进行转换 ASCII文件又称文本文件,每一个字节放一个字符的ASCII代码10.1.3 文件的分类10.1.3 文件的分类P276(1)(0)(0)(0)(0)ASCII形式二进制形式(10000)10.1.4 文件缓冲区10.1.4 文件缓冲区P277ANSI C采用“缓冲文件系统”处理数据文件 所谓缓冲文件系统是指系统自动地在内存区为程序中每一个正在使用的文件开辟一个文件缓冲区10.1.4 文件缓冲区10.1.4 文件缓冲区P277从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘去 如果从磁盘向计算机读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(给程序变量)10.1.4 文件缓冲区10.1.4 文件缓冲区P277程序数据区输出文件缓冲区输入文件缓冲区磁盘从内存向磁盘输出数据装满缓冲区10.1.4 文件缓冲区10.1.4 文件缓冲区P277程序数据区输出文件缓冲区输入文件缓冲区磁盘从磁盘向计算机读入数据充满缓冲区10.1.5 文件指针10.1.5 文件指针P277缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针” 每个被使用的文件都在内存中开辟一个相应的文件信息区,用来存放文件的有关信息(如文件的名字、文件状态及文件当前位置等) 这些信息是保存在一个结构体变量中的。该结构体类型是由系统声明的,取名为FILE10.1.5 文件指针10.1.5 文件指针P277声明FILE结构体类型的信息包含在头文件“stdio.h”中 一般设置一个指向FILE类型变量的指针变量,然后通过它来引用这些FILE类型变量10.1.5 文件指针10.1.5 文件指针P277FILE *fp1,*fp2,*fp3;文件f1的 文件信息区fp1文件f2的 文件信息区fp2文件f3的 文件信息区fp310.2 文件的打开与关闭10.2 文件的打开与关闭10.2.1 用fopen函数打开数据文件 10.2.2 用fclose函数关闭文件P27810.2.1 用fopen函数打开数据文件10.2.1 用fopen函数打开数据文件P278对文件读写之前应该“打开”该文件,在使用结束之后应“关闭”该文件。 所谓“打开”是指为文件建立相应的信息区(用来存放有关文件的信息)和文件缓冲区(用来暂时存放输入输出的数据)。10.2.1 用fopen函数打开数据文件10.2.1 用fopen函数打开数据文件P278在编写程序时,在打开文件的同时,一般都指定一个指针变量指向该文件,也就是建立起指针变量与文件之间的联系,这样就可以通过该指针变量对文件进行读写 所谓“关闭”是指撤销文件信息区和文件缓冲区 10.2.1 用fopen函数打开数据文件10.2.1 用fopen函数打开数据文件P278fopen函数的调用方式为: fopen(文件名,使用文件方式); 例如: fopen(“a1”,”r”); 表示要打开名为“a1”的文件,使用文件方式为“读入” fopen函数的返回值是指向a1文件的指针10.2.1 用fopen函数打开数据文件10.2.1 用fopen函数打开数据文件P278通常将fopen函数的返回值赋给一个指向文件的指针变量。如: FILE *fp; fp=fopen(“a1”,”r”); fp和文件a1相联系,fp指向了a1文件10.2.1 用fopen函数打开数据文件10.2.1 用fopen函数打开数据文件P278在打开一个文件时,通知编译系统以下3个信息: ①需要访问的文件的名字 ②使用文件的方式(“读”还是“写”等) ③让哪一个指针变量指向被打开的文件 使用文件方式参见教材表10.1。10.2.1 用fopen函数打开数据文件10.2.1 用fopen函数打开数据文件P278说明: (1) 最基本的是“r”,“w”,“a”三种方式。在其后加“b”表示是二进制文件,“+”表示既可读又可写。10.2.1 用fopen函数打开数据文件10.2.1 用fopen函数打开数据文件P278说明: (2) 如果不能实现“打开”的任务,fopen函数将会带回一个出错信息。出错的原因可能是用“r”方式打开一个并不存在的文件;磁盘出故障;磁盘已满无法建立新文件等。此时fopen函数将带回一个空指针值NULL。10.2.1 用fopen函数打开数据文件10.2.1 用fopen函数打开数据文件P278常用下面的方法打开一个文件: if ((fp=fopen(“file1”,’r″))==NULL)  {printf(“cannot open this file\n”); exit(0);  }终止正在执行的程序10.2.2 用fclose函数关闭文件10.2.2 用fclose函数关闭文件P280关闭文件用fclose函数。fclose函数调用的一般形式为 fclose(文件指针); 例如: fclose (fp); 如果不关闭文件将会丢失数据。10.3 文件的顺序读写10.3 文件的顺序读写P280在顺序写时,先写入的数据存放在文件中前面,后写入的数据存放在文件中后面 在顺序读时,先读文件中前面的数据,后读文件中后面的数据 对顺序读写来说,对文件读写数据的顺序和数据在文件中的物理顺序是一致的 顺序读写需要用库函数实现10.3 文件的顺序读写10.3.1 向文件读写一个字符 10.3.2 向文件读写一个字符串 10.3.3 文件的格式化读写 10.3.4 用二进制方式读写文件10.3 文件的顺序读写P28010.3.1 向文件读写一个字符10.3.1 向文件读写一个字符P280读写一个字符的函数10.3.2 向文件读写一个字符串10.3.2 向文件读写一个字符串P284读写一个字符串的函数null说明: (1)用fgets函数可以从指定的文件读入一个字符串。如: fgets(str,n,fp); null说明: fgets(str,n,fp);中n是要求得到的字符个数,但实际上只读n-1个字符,然后在最后加一个’\0’字符,这样得到的字符串共有n个字符,把它们放到字符数组str中 如果在读完n-1个字符之前遇到换行符“\n”或文件结束符EOF,读入即结束,但将所遇到的换行符“\n”也作为一个字符读入 执行fgets成功,返回str数组首地址,如果一开始就遇到文件尾或读数据错,返回NULLnull说明: (2)用fputs函数可以向指定的文件输出一个字符串。如: fputs(″Chian″,fp); fputs函数中第一个参数可以是字符串常量、字符数组名或字符型指针 字符串末尾的′\0′不输出 输出成功,函数值为0;失败,函数值为EOF10.3.3 文件的格式化读写10.3.3 文件的格式化读写P287一般调用方式为: fprintf(文件指针,格式字符串,输出表列); fscanf (文件指针,格式字符串,输入表列); 如: fprintf (fp,”%d,%6.2f”,i,f); fscanf (fp,”%d,%f”,&i,&f);10.3.4 用二进制方式读写文件10.3.4 用二进制方式读写文件P288一般调用形式为: fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); 10.3.4 用二进制方式读写文件10.3.4 用二进制方式读写文件P288buffer:是一个地址 对fread来说,它是用来存放从文件读入的数据的存储区的地址 对fwrite来说,是要把此地址开始的存储区中的数据向文件输出 size:要读写的字节数 count:要读写多少个数据项 fp:FILE类型指针10.4 文件的随机读写10.4 文件的随机读写P291对文件进行顺序读写比较容易理解,也容易操作,但有时效率不高 随机访问不是按数据在文件中的物理位置次序进行读写,而是可以对任何位置上的数据进行访问,显然这种方法比顺序访问效率高得多10.4 文件的随机读写10.4 文件的随机读写10.4.1 文件位置指针及其定位 10.4.2 随机读写文件P29110.4.1 文件位置指针及其定位10.4.1 文件位置指针及其定位P2921.文件的位置指针 为了对读写进行控制,系统为每个文件设置了一个位置指针,用来指示当前的读写位置。10.4.1 文件位置指针及其定位10.4.1 文件位置指针及其定位P2921.文件的位置指针文件指针读写当前位置文件尾文件头10.4.1 文件位置指针及其定位10.4.1 文件位置指针及其定位P2921.文件的位置指针 一般情况下,在对字符文件进行顺序读写时,文件标记指向文件开头,进行读的操作时,就读第一个字符,然后文件标记向后移一个位置,在下一次读操作时,就将位置标记指向的第二个字符读入。依此类推,直到遇文件尾,结束10.4.1 文件位置指针及其定位10.4.1 文件位置指针及其定位P2921.文件的位置指针 如果是顺序写文件,则每写完一个数据后,文件标记顺序向后移一个位置,然后在下一次执行写操作时把数据写入指针所指的位置。直到把全部数据写完,此时文件位置标记在最后一个数据之后10.4.1 文件位置指针及其定位10.4.1 文件位置指针及其定位P2921.文件的位置指针 可以根据读写的需要,人为地移动了文件标记的位置。文件标记可以向前移、向后移,移到文件头或文件尾,然后对该位置进行读写——随机读写 随机读写可以在任何位置写入数据,在任何位置读取数据10.4.1 文件位置指针及其定位10.4.1 文件位置指针及其定位P2922. 文件位置指针的定位 可以强制使文件位置指针指向指定的位置 用以下函数实现: (1)用rewind函数使文件指针指向文件头 rewind函数的作用是使文件指针重新返回文件的开头,此函数没有返回值。null(2) 用fseek函数移动位置指针 fseek函数的调用形式为: fseek(文件类型指针,位移量,起始点) 起始点0代表“文件开始”,1为“当前位置”,2为“文件末尾”nullfseed函数中的“起始点”的表示方法null位移量指以起始点为基点,向前移动的字节数。位移量应是long型数据(在数字的末尾加一个字母L)。 fseek函数一般用于二进制文件。下面是fseek函数调用的几个例子: fseek (fp,100L,0); fseek (fp,50L,1); fseek (fp,-10L,2); null (3) 用ftell函数测定位置指针的当前位置 ftell函数的作用是得到流式文件中位置指针的当前位置。 由于文件中的位置指针经常移动,人们往往不容易知道其当前位置,所以常用ftell函数得到当前位置。用相对于文件开头的位移量来表示。 如果ftell函数返回值为-1L,表示出错。
/
本文档为【第10章利用文件保存数据】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索