文档介绍:先看一个实例:求 n个数的累加#define N 10000 main( ) {int i,n,m=0; int data[N] printf( “ input data number:\n ”): scanf (“%d ”,&n); for(i=0;i<n;i++) { scanf( “%d ”,&data[i]); m=m+data[i]; } printf( “ total=%d\n ”,m); } 运行时输入: 101 2 3 4 5 6 7 8 9 10 运行结果: total=55 显然此题是求 10个数的累加。 2017-6-10 1第九章文件输入输出上述程序运行时从键盘上输入小于 10个数的整数后进行累加,然后输出累加结果。如果要求输入 100 个或更多个整数,那此程序则不灵活了。因为有两个问题: (1)从键盘上输入较困难; (2)容易输错。那么是否可以用其它软件,如 tc、 edit 、 vi等编辑软件首先生成一个数据文件,程序运行时不再从键盘上输入数据,而是直接从文件上读取数据呢? 答案是可以的。这就是本章要解决的问题。 2017-6-10 2第九章文件输入输出在程序运行时,程序本身和数据一般都存放在内存中。当程序运行结束后,存放在内存中的数据被释放。如果需要长期保存程序运行所需的原始数据,或程序运行产生的结果,就必须以文件形式存储到外部存储介质上。文件( file )是程序设计中一个非常重要的概念。所谓“文件”一般指存储在外部介质上数据的集合。一批数据是以文件的形式存放在外部介质上的。也就是说, 如果想利用存在外部介质上的数据,必须先根据文件名找到所指定的文件,然后再从该文件中读取数据。要向外部介质上存储数据也必须先建立一个文件,才能向它输出数据。 C 语言把文件看作是一个字符的序列,即由一个一个字符的数据顺序组成。根据数据的组织形式,可分为 ASCII 文件(文本文件)和二进制文件。 2017-6-10 3第九章文件输入输出 1 文件与文件名文件是指存放在外部存储介质上的数据集合。为标识一个文件,每个文件都必须有一个文件名,其一般结构为: 主文件名[. 扩展名]文件命名规则,遵循操作系统的约定。 2 读文件与写文件所谓读文件是指:将磁盘文件中的数据传送到计算机内存的操作; 所谓写文件是指:从计算机内存向磁盘文件中传送数据的操作。 2017-6-10 文件概述 3文件分类(1 )根据文件的内容,可分为程序文件和数据文件,程序文件又可分为源文件、目标文件和可执行文件; (2 )根据文件的组织形式,可分为顺序存取文件和随机存取文件; (3)根据文件的存储形式,可分为 ASCII 码文件和二进制文件。 ASCII 码文件的每 1 个字节存储 1 个字符,便于对字符进行逐个处理。但一般占用存储空间较多,而且要花费转换时间; 二进制文件是把内存中的数据,原样输出到磁盘文件中。可以节省存储空间和转换时间,但 1个字节并不对应 1个字符。 2017-6-10 文件概述 2017-6-10 文件概述 4 文件缓冲区在程序的运行过程中,程序要将保存在内存中的数据写入磁盘,首先要建立一个“输出文件缓冲区”,这个缓冲区是一个连接计算机内存数据与外存文件的桥梁,当向文件输出数据时,准备输出的数据先写入文件缓冲区, 等文件缓冲区填满后再输出到文件中。这一过程称为“写文件”,是数据输出过程。与“写文件”过程相对的是要将保存在文件中的数据装入内存。首先要建立一个“输入文件缓冲区”,当从文件中输入数据时, 也是把读入的数据先写入文件缓冲区,等文件缓冲区数据装满之后再整个送给程序。这一过程称为“读文件”,是数据输入过程。 2017-6-10 7 使用缓冲区的文件读、写示意图 文件概述 5 文件类型指针缓冲文件系统中, 文件类型指针称为文件指针。系统给每个打开的文件都在内存中开辟一个区域,用于存放文件的有关信息(如文件名、文件位置等)。这些信息保存在一个结构体类型变量中,该结构类型由系统定义,取名为 FILE 。注意:“ FILE ”必须大写。例: FILE * fp ; fp是一个指向 FILE 类型结构体的指针变量。通过指针变量能够找到与它相关的文件;如果有 n 个文件,一般应设 n 个指针变量,使它们分别指向 n 个文件,实现对文件的访问。 2017-6-10 文件概述这种指向文件信息区的指针变量称为指向文件的指针变量。文件的指针变量不是指向外部数据的文件开头,而是指向内存中的文件信息区开头 2017-6-10 文件概述 2017-6-10 文件的打开与关闭文件在进行读写操作之前要