C语言 13-Files.pptVIP

  • 4
  • 0
  • 约4.52千字
  • 约 20页
  • 2017-07-05 发布于河南
  • 举报
C语言 13-Files

文件 吴清锋 2007年秋 提纲 概述 文件的概念 ASCII文件和二进制文件 “缓冲文件系统”和“非缓冲文件系统” 文件操作 文件类型指针 文件的打开与关闭 文件的读写 文件的定位 出错的检测 文件的概念 文件是程序设计中的一个重要的概念。所谓“文件”一般指存储在外部介质上数据的集合(功能类似现实文件)。操作系统以文件为单位管理数据(其含义?P330)。 文件使得数据可以长期保存。 从操作系统的角度看,每个与主机相联的输入输出设备都看成是一个文件(这可以从后面将要介绍的文件I/O函数和以前所介绍的终端I/O函数的类似性看出)。 ASCII文件和二进制文件 C语言将文件看成一个字符(字节)的序列(流),即由一个个字符(字节)顺序组成。 根据数据的组织方式: ASCII文件又称为文本文件(侧重字符(字节)流) 二进制文件(侧重二进制流) 用ASCII码形式输出与字符一一对应,一个字节代表一个字符,便于对字符进行逐个处理,也便于输出,但占存储空间较多,而且要花费转换时间。 内存中的数据用二进制形式输出数值,可以节省外存空间和转换时间,但不能直接输出字符形式。一般适用于保存中间结果。 C文件是一个字节流或二进制流。它不考虑文件的内容,文件的内容如何解释完全依赖于相应的存取程序。 缓冲文件系统和非缓冲文件系统 缓冲文件系统是指系统自动地在内存区中为每一个正在使用的文件名开辟一个缓冲区。内存和磁盘的数据交换必须通过该缓冲区(大小一般为512字节)。 而非缓冲文件系统则指系统不自动开辟确定大小的缓冲区,而由程序为每个文件设定缓冲区。 ANSI C标准决定不采用非缓冲文件系统。 在C中没有输入输出语句,对文件的读写都是用库函数来实现的。 文件类型指针 每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如文件的名字、文件状态及文件当前位置等)。 这些信息放在类型为FILE(在stdio.h中定义)的结构体变量中(P331) 应用一:使用FILE类型可以定义若干个FILE类型的变量,以便存放若干个文件信息。而使用其中的信息又可以访问相应的文件。 应用二:由于多数的文件处理函数,要求传递的参数和返回值是FILE类型的结构体指针,所以用得较多的是如下的定义:FILE * fp; 文件的打开与关闭(1):fopen 对文件读写前应该“打开”文件,使用后应“关闭”。 原型:#include stdio.h    FILE * fopen (const char * filename ,     const char * mode); 返回值:成功时返回打开的文件指针,失败时返回NULL。 常用的方式(P332,注意如何使用函数以及赋值) 注意: mode指定了文件的打开模式(取值) 文件打开不一定是成功的,如果不成功,返回的是NULL。对该指针进行操作将是危险的,所以一般要进行出错判断(形式) 对文本文件进行输入输出时,换行符将进行转换:输出时,换行符转换成换行加回车;输入时则相反。 文件的打开与关闭(2):fclose 何谓“关闭”文件? 原型:#include stdio.h    int fclose (FILE * fp); 返回值:成功时返回0,失败时返回EOF。 注意:要养成不使用文件时及时关闭的好习惯。(否则对文件的更改并不一定真正生效) 文件的读写(1) fputc函数 函数的功能 #include stdio.h int fputc (int ch , FILE * fp); 成功返回所输出的字符,否则返回一个EOF。 三个标准文件指针:stdin,stdout,stderr(P334) #define putchar(c) fputc (c , stdout) fgetc函数 函数的功能 #include stdio.h int fgetc (FILE * fp); 成功时返回所读取的字符,否则读到文件结束符时返回EOF。 文件的读写(2) 如何判断是否到达文件的末尾 用EOF:仅适用于文本文件 c=fgetc(fp); while (c!=EOF) { … c=fgetc(fp); } feof #include stdio.h int feof (FILE * fp); 当没有遇到文件结束时,返回0,否则返回1。 while (!feof (fp)) { c=fgetc(fp); … } 示例 文件的读写(3) fread函数和fwrite函数:读写一个数据块 #include stdio.h size_t fread(void * ptr, size_t size, size_t n, FILE * fp); size_t fwrite(const voi

文档评论(0)

1亿VIP精品文档

相关文档