文件(转自C语言习题与解析 李春葆 第3版)

文件的概念、文件指针、文件类型、文件输入输出操作。

文件打开时的文集使用模式选择,各种输入输出函数的使用。

文件的随机读/写操作方法及其应用。

1、文件概述

操作系统是以文件为单位进行数据管理的,也就是说,如果想找到存储在外部介质上的某个数据,必须先按文件名找到所指定的文件,然后从该文件中读取数据。要向外部介质上存储数据也必须先建立一个文件(以文件名标示),才能向他输出数据。

(1)文件的分类

文件通常是存储在外部介质上的,在使用时才调入内存来。从不同的角度可对文件做不同的分类。

a、从用户的角度,文件可分为普通文件和设备文件两种

普通文件是指存储在磁盘或其它外部介质上的一个有序数据集,可以是源程序文件、目标文件、可执行文件(这些可称为程序文件);也可以是一组待输入处理的原始数据,或者是一组输出的结果(这些可称为数据文件)。

设备文件是指与主机相连的各种外部设备,如显示器、打印机、键盘等。在操作系统中也把外部设备看做是一个文件来进行管理,把通过他们进行的输入、输出等同于对磁盘文件的读和写。另外,三个标准设备文件的文件结构体指针也是由系统命名的,如下所示:

stdin:标准输入文件结构体指针 (由系统分配为键盘)

stdout:标准输出文件结构体指针 (由系统分配为显示器)

stderr:标准错误输出文件结构体指针 (由系统分配为显示器)

b、从文件的存取(读/写)方式,文件可分为顺序文件和随机文件

顺序文件通常不用于更新已有的某个数据,而是用于重写整个文件。随机文件通常具有固定的长度,可以直接访问文件中的特定记录,也可以把数据插入到文件中,以达到修改数据的目的。

c、从文件编码的方式,文件可分为ASCII码文件(文本文件)和二进制码文件

文本文件的每一个字节存放一个ASCII码,代表一个字符。

(2)流和文件指针

流实际上是文件输入输出的一种动态形式。设备的输入和输出都是用流来处理的。

文件指针:FILE *文件指针

(3)文件的操作流程

创建/打开文件;文件中读写数据;关闭文件;

C程序中不能直接对磁盘文件操作,需通过内存中的变量来实现这种存取操作。从文件中读取数据就是从指定文件中取出数据,并存入程序在内存中的数据区,如变量或数组中。

在进行文件操作时,写文件的一般含义是将内存中的信息存入磁盘。

在C语言中,文件的存取是以字符为单位的,这种文件被称为流文件。

2、文件的操作

(1)文件的打开与关闭

打开文件:就是把程序中要操作的文件与磁盘上实际的数据文件联系起来。函数是fopen(),其一般格式如下:

fopen(文件名,文件使用模式);该函数既可以打开文本文件,也可以打开二进制文件。

当对文件的读写操作完成后,必须将它关闭,使文件指针与关联的文件脱离联系,以便将文件指针分配给其它文件。若系统使用模式是“写”方式,则系统首先把文件缓冲区中剩余数据全部输出到文件中,然后两者脱离关系。如此看来,在完成了对文件的操作之后,应当关闭文件,否则文件缓冲区中的剩余数据就会丢失。

关闭文件函数:fclose(文件指针);

文件缓冲区

缓冲文件系统是指系统自动的在内存区为每一个正在使用的文件开辟一个缓冲区。从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘去。

判断文件结束:就是判断文件指针是否指向文件末尾。feof函数用来检测文件是否结束,格式为:feof(文件指针)。文本文件以EOF(-1)作为文件结束标志。

 

对于文本文件,只能使用以下介绍的文件字符、字符串和格式化输入输出函数;对于二进制文件,可以使用以下介绍的所有输入输出函数。

(2)文件输入输出函数

a、文件的字符输入函数

所谓文件输入,是指从文件中读出数据,并将其保存到内存变量中,文件输入是相对内存变量的。函数getc或fgetc用于输入一个字符,一般格式如下:ch=getc(fp)或者ch=fgetc(fp)

b、文件的字符输出函数

一般格式:put(ch,fp)或fputc(ch,fp)

(3)文件的字符串输入输出函数

字符串输入函数:fgets(字符串变量,n,fp);读入n-1个字符和一个字符串结束符;

字符串输出函数:fputs(字符变量,fp);

(4)文件的格式化输入输出函数

格式化输出函数fprintf()是按指定的格式将内存中的数据转换成对应的字符,并以ASCII码的形式输出到文本文件中。它与printf()函数相似,只是将输出的内容按格式存放在磁盘的文本文件中。其一般使用格式如下:fprintf(fp,格式串,输出项表);其中fp是文件指针,“格式串”和“输出项表”的用法与printf函数相同。该函数把格式化的数据输出到指定的文件中去。

格式化输入函数fscanf(fp,格式串,输入表项);

(5)文件的数据块输入输出函数

在内存和磁盘之间需要频繁交换数据时,最好不用fprintf和fscanf函数,而用fread和fwrite函数。

数据块输入输出函数只适合于二进制文件。

数据块输出输入函数

fwrite(buf,size,count,fp)

fread(buf,size,count,fp)

例题:fopen("A:\\user\\abc.txt","r++");

读写(文件)====输入输出(存储区)

二进制文件可以随机存取,文本文件顺序存取

3、文件的定位和随机读写操作

文件随机读写操作的概念:前面所有例子对文件的读写操作都是按文件的顺序进行的,即每次都是从文件的开头逐个数据读写。在顺序读写时,文件的位置指针(在随机文件中通常称为记录指针)在每次完成读写数据后,就自动移动到它后面的一个位置。但是,实际应用中,人们希望直接读到某个数据项。此时,在读写前首先要确定文件的记录指针位置,然后对该位置进行读写操作,这就是文件的随机读写。

文件定位操作:确定指针位置,也就是文件定位。

获取文件位置指针的当前值:ftell(fp);

移动文件位置指针:fseek(fp,offset,from);offset是文件位置指针的位移量,from是起始点。一般用于二进制文件。

rewind函数用于将文件位置指针置于文件的开头。rewind(fp);

文件定位后就可以用前面介绍的函数进行相应的读写操作了。

你可能感兴趣的:(C语言,p,的)