文件操作

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

7.2 文件操作

C语言程序中对文件的操作一般可分为“四步走”:第一步,定义文件(FILE)类型指针变量;第二步,用fopen()函数打开文件;第三步,对文件进行读或写操作;第四步,用fclose()函数关闭文件。

下面一一进行讲述。

7.2.1 文件指针

在缓冲文件系统中,每个被使用的文件都在内存中开辟一个区域,用来存放文件的有关信息(如文件名、文件的状态以及文件的当前位置等)。这些信息是保存在一个结构体类型的变量中的,该结构体类型是由系统定义的,取名为FILE,VC6.0中此结构体的具体定义如下:

struct _iobuf

{

char *_ptr;

int _cnt;

char *_base;

int _flag;

int _file;

int _charbuf;

int _bufsiz;

char *_tmpfname;

};

typedef struct _iobuf FILE;

上面的typedef用于为现有类型创建一个新的名字,即为类型“struct _iobuf”创建了一个新的名字“FILE”。

有了FILE类型之后,可以用它来定义若干个FILE类型的变量,以便存放文件信息。例如:

FILE *fp;

fp是一个指向FILE类型结构体的指针变量。可以使fp指向某一个文件的结构体变量,从而通过该结构体中的文件信息访问该文件。

7.2.2 文件操作基本步骤示例

下面通过实际例子对文件的操作加以演示。

例1:编写程序,从键盘输入若干个数,降序排序后存入文件jieguo.txt中去,同时将结果在屏幕上显示。

分析:此例算法比较简单,主要涉及到文件的基本操作,直接给出程序如下:#include

#include

#define N 10

void main()

{

int a[N+1],i,j;

FILE *fp;//定义FILE(文件)类型指针变量

printf("\n请输入%d个待排序的数(整数):",N);

for(i=1;i<=N;i++) //输入原始数据

scanf("%d",&a[i]);

for(j=1;j<=N-1;j++)

for(i=j+1;i<=N;i++)

if(a[j]

{

a[0]=a[j]; //利用空闲的0号元素实现交换

a[j]=a[i];

a[i]=a[0];

}

printf("\n排序如果如下:\n");

for(i=1;i<=N;i++) //向屏幕输出排序结果

printf("%6d",a[i]);

fp=fopen("jieguo.txt","w"); //以写方式打开指定文件

if(fp==NULL) //若打开文件不成功,则提示用户失败信息printf("\n文件建立失败,数据保存不成功!\n");

else //若打开文件成功

{

for(i=1;i<=N;i++)

fprintf(fp,"%6d",a[i]);//向文件中输出排序结果

fclose(fp); //文件使用完毕,关闭文件

printf("\n数据已存入文件jieguo.txt!\n"); //提示成功保存

}

system("pause");

}

例2:编写程序,从文件jieguo.txt中读入所有数据,将其中的偶数全部挑选出来并存入文件oushu.txt中去。直接给出程序如下:

#include

#include

void main()

{

int a,count=0;

FILE *fp1,*fp2; //定义两个FILE(文件)类型指针变量

fp1=fopen("jieguo.txt","r"); //以读方式打开原始数据文件

if(fp1==NULL) //若打开文件不成功,则提示用户失败信息

printf("\n文件无法打开,操作不能继续进行!\n");

else //若打开文件成功

{

fp2=fopen("oushuji.txt","w");//以写方式打开存放数据文件

if(fp2==NULL) //若打开文件不成功

printf("\n文件无法建立,数据不能保存!\n");

else //若打开文件成功

{

while(!feof(fp1)) //数据未读取完

{

fscanf(fp1,"%d",&a);//读取一个数

printf("%8d",a); //在屏幕上显示

if(a%2==0) //判断是否为偶数

fprintf(fp2,"%6d",a);//将偶数写入目标文件

}

fclose(fp2); //文件使用完毕,关闭文件

printf("\n数据已存入文件oushu.txt!\n");//提示成功保存

}

fclose(fp1); //文件使用完毕,关闭文件

}

system("pause");

}

以上程序演示了对文件操作的一般流程,下面对文件操作的相关内容做进一步说明。

7.3 文件操作相关函数

对文件的具体操作都是通过一些专用函数实现的,下面就主要函数做详细解释。

7.3.1 文件的打开:fopen()函数

fopen()函数用于打开文件,其一般格式为:

FILE *fopen("文件名","文件使用方式");

如:

FILE *fp;

fp=("d:\\aa.txt", "r");

以“读方式”打开D盘根目录下aa.txt文件。fopen()函数返回指向aa.txt文件的指针并赋给fp,这样fp就和aa.txt 相联系了,或者说,fp就指向aa.txt文件了。可以看出,在打开一个文件时,需要确定以下三个方面的信息:(1)需要打开的文件名,也就是准备访问的文件的名字

(2)使用文件的方式(读还是写等)

(3)让哪一个指针变量指向被打开的文件

文件使用方式见表7-1:

表7-1 常见文件使用方式

文件使用方式含义

r (只读) 以读方式打开一个文本文件用于输入

w (只写) 以写方式打开一个文本文件用于输出

a (追加) 以追加方式打开一个文本文件用于向文件末尾追加数据,存在则打开,不存在则创建

rb (只读) 以读方式打开一个二进制文件用于输入

相关文档
最新文档