好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

【经管类】CHAPT13文件.ppt

40页
  • 卖家[上传人]:Jerm****014
  • 文档编号:50259905
  • 上传时间:2018-08-07
  • 文档格式:PPT
  • 文档大小:795.50KB
  • / 40 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第十三章 文 件• 所谓文件—— 存储在外部介质上的数据的集合,例如:存储在磁盘上• C语言把文件看作是一个字符(字节)的序列,即由一个一个字符(字节)的 数据顺序组成• C语言中的文件存储方式分为 :ASCII文件 和 二进制文件• ASCII文件(文本文件) : 每个字节存放一个ASCII代码,代表一个字符• 二进制文件 : 把内存中的数据按其在内存中的存储形式原样输出到 磁盘 上存放• 操作系统是以 文件为单位 对数据进行管理以前各章中使用的输入输 出都是以终端为对象的,即从终端输入数据,运行结果输出到终端上• 从操作系统的角度看,每一个与主机相连的输入输出设备都看成是一个 文件例如:终端键盘为输入文件,显示器和打印机为输出文件13.1 C 文件概述ASCII文件便于字符处理和输出,二进制文件节省存储空间其中: ' 0 '-----ASCII码为 48(对应编码为110000) ' 1' -----ASCII码为 49 (对应编码为110001)例. 整数 10000 的存储:00100111 0001000000110001 00110000 00110000 00110000 0011000000100111 00010000二进制 存储形式(2个字节)内存存储形式 '1' ' 0' ' 0' ' 0' ' 0'ASCII 存储形式(5个字节)说明: 1. 一个文件是一个字符流 或 二进制流。

      2. C 语言中对文件的存取是以字符(字节)为单位的, 输入输出数据流 仅受程序控制,不受物理符号控制(如:回车,换行符), 称这样的 文件为 流文件10000的二进制形式过去使用的C 语言版本中的文件处理方法有两种:1. 缓冲文件系统—— 系统自动地在内存中为每个正在使用的文件名开辟一个 缓冲区用于处理文本文件(字符流)程序数据区 (输入、输出)文件缓冲区 磁盘文件 程序数据区磁盘输出文件缓冲区输入文件缓冲区输入输入输出输出2. 非缓冲文件系统—— 不是系统自动 而是由程序为每个文件设定缓冲区用于处理二进制文件(二进制流)标准的 C 语言只采用缓冲文件系统 :既可以处理文本文件,也可以处理 二 进制文件 C语言中对文件的读写都是用库函数来实现每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息 (如:文件的名字 、文件状态与文件当前位置等)这些信息保存在一个 结构体类型的变量中 结构体类型是由系统定义的,名为 FILE Turbo C 在 stdio.h 文件中有以下的文件类型声明:typedef struct { char level ; /* 缓冲区“满“或“空“ 的程度 */ unsigned flags ; /* 文件状态标志 */ char fd ; /* 文件描述符(文件号) */ unsigned char hold ; /* 如无缓冲区不读取字符 */ char bsize ; /* 缓冲区大小 */ unsigned char *buffer ; /* 数据缓冲区的位置 */ unsigned char *curp ; /* 指针,下一个字符的位置 */ unsigned istemp ; /* 临时文件,指示器 */ char token ; /* 用于有效性检查 */ } FILE ;13 . 2 文件类型指针有了FILE 类型之后,就可以用它来 定义FILE类型的变量、数组或指 针变量,以便存放若干个文件的信息。

      例如: FILE f[5]; 定义了一个结构体数组 f ,它有5个元素,可以用来存放5个文件的信息FILE *fp; 表示定义了一个指向FILE 类型结构体的指针变量 fp,可以使 fp指向某个 文件的结构体变量,从而通过该结构体变量中的文件信息来访问该文件 也就是说,通过文件指针变量能够找到与它相关的文件如果有n 个文件,一般应该设n 个指向FILE 类型结构体的指针变量,使它 们分别指向n 个文件,以实现对文件的访问例如:fp=fopen(“a1“,“r“);说明: ⑴ a1 为文件名 , 是字符串称为外部文件名⑵ 使用方式为: 只读方式⑶ fopen 函数带回指向文件a1 的指针,并赋给 fp,使得 fp指向a1 fp 称为内部文件名通过 fopen( ) 使内部文件名 和 外部文件名联系上,即fp 指向 a1文件可以看出,在打开一个文件时,通知给编译系统以下3个信息: ①需要打开(即访问)的文件名②使用文件的方式③让哪一个指针变量 指向被打开的文件如果 fopen 函数打开文件失败,则返回一个空指针值 NULL if ( fp=fopen(“a1“,“r“) = = NULL ) { }13.3 文件的打开与关闭13.3.1 文件的打开( fopen 函数 )C语言中用 fopen( ) 函数来实现打开文件, fopen 函数的调用方式为 :FILE *fp;fp = fopen(文件名,使用文件方式) ;文件使用方式含 义义 r(只读读) 为输为输 入打开一个已存在的文本文件。

      w(只写) 为输为输 出创创建新文件,(若文件已存在,则则文件内容被清空) a (追加数据) 只用于向已存在的文件的末尾添加数据 rb(只读读)为输为输 入打开一个已存在的二进进制文件wb(只写)为输为输 出打开一个二进进制文件若文件不存在,则创则创 建新文 件 ab(追加)打开一个已存在的二进进制文件,在文件尾追加数据r+(读读/写)为读为读 写打开一个已存在的文本文件w+(读读/写)建立一个新文本文件若文件已存在,则则文件内容被清空a+(读读/写)保留已存在的文件,可以添加数据,也可以读读取数据rb+(读读/写)为读为读 写打开一个已存在的二进进制文件wb+(读读/写)建立一个新的二进进制文件,若文件已存在,则则文件内容被清空ab+(读读/写)保留已存在的文件,可以添加数据,也可以读读取数据13.3.2 文件的关闭(fclose 函数 )关闭文件 —— 就是使文件指针不再指向该文件,即使文件指针变量与 文件“脱钩”C 语言中用 fclose( ) 函数来关闭文件, fclose 函数的调用形式是 :fclose (文件指针) ;例如 : fclose(fp) ; 关闭 fp 所指向的文件如果fclose 函数关闭文件成功,则返回零值;如果fclose 函数关闭文件失败, 则返回非零值 EOF( -1),EOF 为文件结束符。

      用户应该养成在程序结束以前关闭所有文件的习惯,如果不关闭文件将 会丢失数据fclose 函数在程序结束以前先把文件缓冲区中的数据输出到磁 盘文件, 然后才释放文件指针变量在用户登录时,系统自动打开 3 个标准文件: stdin : 标准输入文件,指向终端输入(例如,键盘输入)stdout : 标准输出文件,指向终端输出 (例如,显示器和打印机)stderr : 标准出错文件,指向终端输出(例如,显示器)13.4.1 字符输入输出函数1. fputc 函数—— 把一个字符写到 磁盘文件上去,调用方式为 : fputc(ch , fp); 其作用是 将字符(ch 的值)输出到 fp 所指向的文件中去 如果输出成功,则返回 ch字符;否则,返回 EOF (即 -1)13 . 4 文件的读写系统定义的文件指针变量在 stdio.h 中有如下定义 :#define putchar(c) fputc(c , stdout )所以 putchar( ) 实际上是宏指令,表示将字符标准输出(到终端)2. fgetc 函数从指定的文件读入一个字符,该文件必须是以“读”或“读写”方式打开。

      调用方式为 : ch = fgetc(fp); fgetc 函数从 fp 所指定文件的当前位置读入一个字符赋给ch;同时,文件 的当前位置加 1,如果读入时遇到文件结束符,则返回EOF(即 -1)EOF 是在 stdio.h 中 定义的符号 常量,值为 -1由于字符的 ASCII 码不可能出现 -1,应此 定义 EOF 为-1 是合适的 EOF 不是可输出字符,因此不 能在屏幕上显示用于表示文 件结束,只适用于文本文件ch = fgetc ( fp) ; while(ch !=EOF) { putchar( ch ) ;ch = fgetc ( fp ) ; }例如 , 从一个磁盘文本文件顺序读入字符并在屏幕显示出来,程序段如下while( ! feof(fp)) { c=fgetc(fp) ;putchar ( c ) ;… }对于 二进制文件,某个字节中的数有可能是 -1,因此难于用 EOF 判断文件是否结束,这时可以用函数 feof( fp) 来测试 fp 所指的文件当前 是否 “文件结束”,是则返回 1,不是则返回 0 例如feof( ) 也适用于文本文件在stdio.h中有如下定义 : #define getchar( ) fgetc( stdin ) 所以 getchar( ) 实际也是宏指令,表示标准输入,即从终端获得一个字符。

      因此使用 putchar( ) 、getchar( ) 时需在文件头加上stdio.h3. fputs ( )函数—— 把一个字符串写到磁盘文件上去调用方式为 :fputs (str , fp) ;这里第一个参数可以是字符串常量、字符数组名或字符型指针 字符串结束符不写入文件如果输出成功 , 则返回 0 , 否则 , 返回 EOF (即 -1)4. fgets ( )函数—— 从指定的文件读入一个字符串调用方式为 : fgets ( str , n , fp) ;从 fp 指定的文件中读入一个最大长度为 n-1 的字符串存入字符数组 str,并在数组str 中加 ' \0 ' 作为字符串结束符如果在读完n-1个字符 之前遇到换行符或EOF,读入即结束如果输出成功 , 则返回 str , 否则 , 返回 NULLinclude main( ){ FILE *fp;char ch , filename[10] ;printf(“Input file name :“) ;scanf(“%s“, filename) ;if( (fp=fopen(filename,“w“)) ==NULL ){ printf(“Cannot open file \n“) ;exit(0) ; }ch=getchar( ) ;while(ch != '#'){ fputc(ch , fp) ; putchar(ch) ; ch=getchar( ) ;}fclose(fp);}例 13.1 将键盘输入的一些字符存入磁盘文件, 直到输入一个# 为止。

      存放创建的新文件名exit( ) 是出口函数 清除缓冲区,关闭文件,结束程序说明:为了书写方便,系统在 stdio.h 中把 fputc 和 fgetc 定义为宏名putc 和getc :#define putc(ch , fp) fputc(ch , fp)#define getc(fp) fgetc(fp)例 13.2 将一个二进制磁盘文件的信息复制到另一个磁盘文件中 #include main( ) 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.