文件操作(c)

一、文件概述

C语言处理输入和输出,是采用“流“的形式,而且常常会有缓冲区,缓冲区的存在可以提高输入/输出处理的高效性,

在程序中,当调用输入函数从外部文件中输入数据赋给程序中的变量时,这种操作称为“输入”或“读”;      例: printf();

当调用输出函数把程序中变量的值输出到外部文件中时,这种操作称为“输出”或“写”。                          例:scanf();

对文件输入、输出方式也称“存取方式”。

二、文件类型指针

在C语言的缓冲文件系统中,用文件类型指针来标识文件。所谓文件指针,实际上是指向一个结构体类型的指针变量,这个结构体中包含有文件的一些信息,如缓冲区的地址,在缓冲区中当前存取的字符的位置,对文件是“读”还是“写”,是否出错,是否已经遇到文件结束标志等信息。此结构体类型名为FILE,可以用此类型来定义文件指针。定义文件类型指针变量的一般形式为:

FILE *变量名表;

【例如】

FILE *fp1,*fp2;

这里fp1和fp2均被定义为指向文件类型的指针变量,称为文件指针。

①文件指针用于指向一个文件,实际上是用于存放文件缓冲区的首地址。在缓冲文件系统中可以进行文件的打开、关闭、读、写、定位等操作。要对文件进行相应的操作,必须先定义一个指向文件的指针。

②结构类型名“FILE”必须大写。

③一般来说,对文件操作有以下3个步骤。

【步骤1】打开文件,即在计算机内存中开辟一个缓冲区,用于存放被打开文件的有关信息。

【步骤2】文件处理,包括读写、定位等操作。

【步骤3】关闭文件,将缓冲区中的内容写回到磁盘,并释放缓冲区。

三、文件的打开与关闭

1)、文件的打开(fopen函数)

C语言中打开一个文件通过系统函数fopen 实现,其调用的一般形式为:

FILE *fopen("文件名"," 操作方式");

等价于:

FILE *fp;

fp=fopen("文件名"," 操作方式");

①“文件名”是将要打开(或创建)的文件的名字,如果使用字符数组(或字符指针),则不使用双引号。

②fopen函数返回一个指向指定文件的文件指针。如果不能实现打开指定文件的操作,则fopen函数返回一个空指针NULL(其值在头文件stdio.h 中被定义为0)。

③用文件指针指向打开的文件后,就可以用它来访问该文件。为增强程序的可靠性,常用下面的方法打开一个文件:

if((fp=fopen(" 文件名"," 操作方式"))==NULL)

{

printf("can not open this file\n");

exit(0);

}

2)、文件的关闭(fclose函数)

对一个文件操作完成后,要将该文件关闭。“关闭”就是使文件指针变量不再指向该文件,也就是文件指针变量与文件“脱钩”,此后不能再通过该指针对原来与其相联系的文件进行读写操作。C语言中关闭一个文件通过系统函数fclose 实现,其调用的一般形式为:

fclose(文件指针);

①文件指针”是已经打开的文件的指针,如13.3.1 小节中的文件指针fp。

②这个函数就是关闭“文件指针”所指向的文件。如果正常关闭了文件,则函数返回值为0;否则,返回值为非0。

fclose(fp);

这条语句就关闭了fp所指向的文件。

四、文件的读/写

文件被打开后可以对文件进行操作,文件的读/写操作是最常用的文件操作。C语言中,文件的读/写没有特定的输入/输出语句,它是通过C提供的库函数来实现的。文件读/写的操作有以下几种。

①读/写文件中的一个字符。

②读/写一个字符串

③读/写一个数据块。

④文件进行格式化读/写。

1)、字符读/写函数fputc和fgetc

fputc功能是将一个字符写到文件中,其调用的一般形式为:

fputc(字符数据,文件指针);

fgetc功能是从文件中读入一个字符,其调用的一般形式为:

fgetc(文件指针);

【例如】

char ch;

ch=fgetc(fp) ;

表示从文件fp中读一个字符,赋给变量ch,同时fp的读/写位置指针向前移动到下一个字符。

2)、字符串读/写函数fputs和fgets

fputs功能是向指定文件输出一个字符串,其调用的一般形式为:

fputs(字符串,文件指针);

fgets功能是从文件中读一个字符串,其调用的一般形式为:

fgets(str,n,fp);

3)、数据块读/写函数fread和fwrite

fread函数的功能是从文件中读取数据块,其调用的一般形式为:

fread(buffer,size,count,fp);

【说明】

①fp是文件指针;buffer是一个指针,用来存放输入数据块的首地址;size表示一个数据块的字节数;count表示要读取的数据块块数。

②此函数的功能是从fp所指向文件的当前位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer开始的内存中;同时,将读/写位置指针向前移动size×count个字节。

③如果调用fread函数成功,则函数返回值等于count。

fwrite函数的功能是向文件写数据块,其调用的一般形式为:

fwrite(buffer,size,count,fp);

【说明】

①fp是文件指针;buffer是一个指针,用来存放将要读取数据块的首地址;size表示一个数据块的字节数;count表示要写的数据块块数。

②此函数功能是从buffer开始,一次输出size个字节,重复count次,并将输出的数据存放到fp所指向的文件中;同时,将读/写位置指针向前移动size×count个字节。

③如果调用fwrite函数成功,则函数返回值等于count。

4)、格式化读/写函数fprintf和fscanf

fprintf函数只能向文本文件中输出数据。fprintf函数和printf函数相似,只是输出的内容将按格式存放到磁盘的文本文件中,而不是屏幕上。fprintf函数的调用形式如下:

fprintf(文件指针,格式控制字符串,输出项表);

fprintf(stdout,"%d %d",x,y);

fscanf函数只能从文本文件中按格式输入。fscanf函数和scanf函数相似,只是输入的对象是磁盘上文本文件中的数据,而不是键盘。fscanf函数的调用形式如下:

fscanf(文件指针,格式控制字符串,输入项表);

fscanf(fp,"%d%d",&a,&b);

5)、判断文件结束函数feof

feof 函数调用的一般形式为:

feof( 文件指针);

【说明】

①“文件指针”指向由fopen函数打开的文件。

②在执行读文件操作时,如果遇到文件尾,则函数返回逻辑真(1);否则,则返回逻辑假(0)。

③feof 函数同时适用于ASCII 码文件和二进制文件。

五、文件的定位

常用的3个文件定位函数:rewind、fseek 和ftell。

1)、rewind函数

rewind 函数的调用形式为:

rewind(fp);

【说明】此函数的功能是使文件的位置指针返回到文件头。其中fp必须是有效的文件指针,即它已经指向一个由fopen 打开的文件。

2)、 fseek函数

文件定位函数fseek一般用于二进制文件,其调用形式如下:

fseek(fp,offset,origin);

3)、ftell函数

另一个与文件读写位置相关的函数是ftell,其调用形式如下:

ftell(fp);

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值