第11章 文件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第11章文件

本章要点

●文件的打开与关闭

●文件的读写

●文件的定位

本章难点

●fopen函数和fclose函数的用法

●fread函数、fwrite函数、fprintf函数和fscanf函数的用法

11.1 C文件概述

以前各章节中所用到的原始数据都是通过键盘输入的,并将输入的数据放入到指定的变量或数组中,若要处理这些数据,可以从指定的变量或数组中取出并进行处理。但是当重新执行程序时,这些输入的数据都将丢失。如果数据量很庞大时,一旦某个数据输入错误,则全部数据都要重新输入。另外,一些程序运行后会产生大量输出结果,对这些结果有时需要反复查看或使用,因此,需要将这些输出结果保存起来。C语言中引入了文件,将程序运行时所需要的和所产生的数据(原始的、中间的、最终的)独立在源程序文件之外,以“数据文件”的形式存储到计算机外存,以备计算机需要时调入内存。这种“数据文件”就是磁操作系统管理下的“文件”。

文件(file)是程序设计中的一个重要概念。所谓“文件”一般是指存储在外部介质上数据的集合。一批文件是以数据的形式存放在外部介质(如磁盘)上的。操作系统是以文件为单位对数据进行管理的。如果想找存在外部介质上的数据,必须先按文件名找到指定的文件,然后再从该文件中读取数据。要向外部介质上存储数据也必须先建立一个文件(以文件名标识),才能向它输出数据。

C语言将文件看作是一个字符(字节)的序列,即一个一个字符(字节)的数据顺序组成。根据数据的组成形式,可分为ASCII文件和二进制文件。ASCII文件又称文本(text)文件,它的每一个字节可放一个ASCII码,代表一个字符。二进制文件是把内存中的数据按其在内存中的存储形式按原样输出到磁盘上存放。因而一个C文件就是一个字节流或二进制流。

C语言中,要调用一个文件,一般需要该文件的一些信息,例如:文件的名字,文件当前的读写位置,文件的操作方式等。缓冲文件系统会为每一个文件系统开辟这样一个“文件信息区”,包含在头文件stdio.h中,它被定义为FILE类型数据。

typedef struct

{

short level; /*缓冲区“满”或“空”的程度*/

unsigned flags; /*文件状态标志*/

char fd; /*文件描述符*/

unsigned char hold; /*如无缓冲区不读取字符*/

short bsize; /*缓冲区的大小*/

unsigned char *buffer; /*数据缓冲区的位置*/

unsigned char *curp; /*指针, 当前的指向*/

unsigned istemp; /*临时文件, 指示器*/

short token; /*用于有效性检查*/

}FILE;

在编写源程序使用一个文件时,只需要先预包含stdio.h头文件,然后定义一个指向该结构体类型的指针,而不必关心FILE结构的细节。例如:

FILE *fp;

fp是一个指向FILE类型结构体的指针变量。可以使文件指针fp指向某一个文件的结构体变量,从而通过该结构体变量中的文件信息能够访问该文件。也就是说,通过文件指针变量能够找到与它相关的文件。

C语言中,对文件一般的操作步骤为:

1)定义文件类型指针

2)建立/打开文件。

3)从文件中读数据或向文件中写数据。

4)关闭文件。

11.2 打开与关闭文件

11.2.1 打开文件

文件在进行读写操作之前要先打开。所谓打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文件。ANSI C规定了标准输入输出函数库,用fopen( )函数来实现打开文件。fopen函数的调用方式通常为

FILE *fp;

fp=fopen(文件名,使用文件方式);

例如:打开一个和可执行文件在相同路径下的文本文件test.txt。

FILE *fp;

fp=fopen("test.txt","r");

又如,打开一个D盘下myfile文件夹下的文本文件test.txt。

方式1:

FILE *fp;

fp=fopen("d:\\myfile\\test.txt","r");

方式2:

FILE *fp;

fp=fopen("d:/myfile/test.txt","r");

其中方式1中指定路径时用了两个反斜线“\\”,第一个表示转义字符,第二个表示根目录。方式2改为正斜线“/”也可以。

文件使用方式见表11.1。

表11.1文件使用方式

说明:

1)用“r”方式打开一个文件时,该文件必须已经存在,且只能从该文件中读出数据。

2)用“w”方式打开的文件只能向该文件写入数据。若要打开的文件不存在,则以指定的文件名建立该文件;若打开的文件已经存在,则将该文件删去,重建一个新文件。

3)若要向一个已经存在的文件中追加信息,只能用“a”方式打开文件。若此时该文件不存在,则会建立一个新文件。

4)如果不能实现“打开”任务,fopen函数将会带回一个出错信息。出错的原因可能是用“r”方式打开一个并不存在的文件;磁盘出故障;磁盘已满无法建立新文件等。如果出错,fopen函数将带回一个空指针NULL。在程序中可以用这一信息来判断是否完成打开文件的操作,并作相应处理。

常用下面程序段打开文件:

FILE *fp;

if ((fp=fopen("test.txt", "r"))==NULL)

{

printf("cannot open this file\n");

exit(0);

}

5)标准输入文件(键盘)、标准输出文件(显示器)和标准出错输出(出错信息)是由系统打开的,可直接使用。

11.2.2 关闭文件

文件打开后若不再继续使用,可使用fclose( )函数将指定的文件关闭。“关闭”就是使文件指针变量不指向该文件,也就是文件指针变量与文件“脱钩”,此后不能再通过该指针对原来与其相联系的文件进行读写操作。fclose函数调用的一般形式为

fclose(文件指针);

例如:

fclose(fp);

fclose函数正确执行关闭文件操作,返回0;否则返回EOF(-1)。EOF是在stdio.h文件中定义的符号常量,值为-1。

应该养成在程序终止之前关闭所有文件的习惯,如果不关闭文件将会丢失数据。因为,在向文件写数据时,是先将数据输到缓冲区,待缓冲区充满后才正式输出到文件。如果当数

相关文档
最新文档