错题归纳总结

 文件:记录在外部介质上的数据的集合,这个数据集有一个名称,叫做文件名

 

使用数据文件的目的

1、数据文件的改动不引起程序的改动——程序与数据分离

2、不同程序可以访问同一数据文件中的数据——数据共享

3、能长期保存程序运行的中间数据或结果数据

 

“输入”或“读”:从外部文件中得到数据给程序使用

“输出”或“写”:把程序中数据输出到外部文件中

文件存取方式:顺序存取和直接存取

顺序存取:每当打开这类文件时,进行读或写操作时,总是从文件的开头开始,从头到尾顺序地读或写

直接存取(随机存取):可以通过调用C语言的库函数去指定开始读或写的字节号,然后直接对此位之上的数据进行读,或把数据写到此位置上

文件可以分为文本文件和二进制文件

文本文件:当输出时,数据转换成一串字符,每个字符以字符的ASCII码值存储到文件中,一个字符占用一个字节。当输入时,又把指定的一串字符按类型转换成数据(文本文件特点:存储量大,转换为二进制速度慢,直观易记,便于对字符进行操作)

二进制文件:当输出时,数据不经过任何转换,按计算机内的存储形式直接存放到磁盘上。当输入时,不经过任何转换,而直接将读入的数据存入变量所占内存空间。(二进制文件特点:存储量小,无需转换,便于存放中间结果)

文件输入或输出的时候,系统将为输入或输出文件开辟缓冲区

缓冲区是系统在内存中为各文件开辟的一片存储区。

输出时,数据先填入缓冲区,缓冲区满时才把内容一次性输出到对应文件。

输入时,从输入文件输入一批数据放入缓冲区,输入语句从缓冲区依次读取数据,数据读取完时,再从输入文件中输入一批数据放入。

文件指针

文件指针实际上是指向一个结构体类型的指针,这个结构体类型名为FILE在stdio.h中

FILE *文件指针变量

FILE *pf1, *pf2

pf1和pf2位文件指针

打开文件

在对文件进行读、写操作之前,首先要解决的问题是如何把程序中要读、写的文件与磁盘上实际的数据文件联系起来。C语言中通过调用fopen来实现。

FILE *fopen(char *filename, char *mode);

打开成功返回一个FILE指针,打开失败,fopen函数将返回NULL,当打开文件内发生错误时程序停止运行

程序运行时系统自动打开和关闭三个标准文件:

标准输入——————键盘    stdin

标准输出——————显示器  stdout

标准出错输出——————显示器  stderr

关闭文件

当对文件的读(写)操作完成之后,必须将关闭。关闭文件可调用库函数fclose来实现。调用形式为

int  fclose(FILE *pf);

若fp指向文件file_a的文件指针,当执行fclose(fp)后,若file_a为读方式,则文件指针fp与文件file_a脱离关系;若为写,则将文件缓冲区中的剩余数据全部输出到文件,然后fp与file_a脱离关系。

当成功地执行关闭操作后,函数返回0,否则返回非0

读写文件

文件打开之后,就可以对它进行读与写的操作了。

fputc函数(putc函数)

函数原型:int fputc(int c, FILE *fp)

功能:把一字节代码c写入fp指向的文件中

返回值:正常,返回c;出错,为EOF(-1)

fgetc函数(getc函数)

函数原型:int fgetc(FILE *fp)

功能:从fp指向的文件中读取一字节代码

返值:返回读到的代码之;读到文件尾或出错为EOF(-1)

feof函数

调用方式:int feof(FILE *fp)

功能:对于二进制文件读取时判断文件是否结束。

返值:结束1;反之0

fprintf和fscanf函数

一般调用格式:fscanf(fp,格式字符串,输入列表);

                         fprintf(fp,格式字符串,输出列表);

返回:成功,返回I/O的个数;出错或文件尾,返回EOF

由于输入输出时要进行ASCII码和二进制形式的转换,费时较多

fscanf(fp,"%d,%f",&i,&t);

若文件中有3,4.5,则将3读出送入i,4.5读出送入t*//*文件中文本的格式要和函数中控制格式字符串对应,有“,”文件中也要有,否则失败。在做配置文件处理时很方便*/

fprint(fp,"%d,%6.2f",i,t);

/*将i和t按%d,%6.2f格式写入到fp文件中*/

fgets和fputs函数

形式:fgets(str,n,fp);(str字符数组,n-1个字符,自动加入‘\0’)

fputs(字符串,fp);("\0"不输出,也不加‘\n’)

作用:从fp指向的文件读/写一个字符串

返回值

fgets正常时返回字符串的首地址;出错或文件尾,NULL

fputs正常时返回写入的最后一个字符;出错为EOF

fread与fwrite函数

一般形式:

fread(buffer,size,count,fp);

fwrite(buffer,size,count,fp);

参数说明:

buffer:要读入的数据块的存放首地址或要输出的数据块的起始地址。

size:每个要读/写的数据块的大小(字节数)

count:要读/写的数据块的个数

fp:要读/写的文件指针

返值:成功,返count的值;出错或文件尾,0值

说明:fread与fwrite一般用于二进制文件的输入/输出

若文件以二进制形式打开,用fread与fwrite可读写任何类型的数据。

文件定位:

相关概念

文件位置指针————指向当前读写位置的指针,具体位置由文件打开方式确定

“r”"w":指向文件头

“a”:指向文件尾

读写方式

顺序读写:位置指针按字节位置顺序移动

随机读写:位置指针需要移动到任意位置

fseek函数和随机读写

调用形式:fseek(文件类型指针,位移量,起始点)

fseek(pf,offset,origin);

功能:改变文件位置指针的位置

返值:成功,返回0;失败。返回非0值

ftell函数

函数原型:long ftell(FILE *fp)

功能:得到文件当前位置指针(用相对于文件开头的位移量表示)

返值:

返回当前位置指针位置;失败,返回-1L

rewind函数

函数原型:void rewind(FILE *fp)

功能:重置文件位置指针到文件开头

返值:无

posted on 2018-09-13 15:26  胖鸟先飞  阅读(193)  评论(0编辑  收藏  举报

导航