您的位置: 网站首页 > 程序开发 > C语言程序设计案例教程 > 第十一章 文件操作 > 【11.2 文件的基本应用案例】

11.2 文件的基本应用案例

 

11.2  文件的基本应用案例

案例11.3  求一个文件的长度

【项目任务】

编写一个程序,求一个文件的长度。

【设计思路】

打开一个文件,通过fseek( )函数,将文件的位置指针移动到文件的末尾,然后再通过ftell( )函数得到文件的当前位置(即相对于文件开头的位移量)。当文件的位置指针在文件的末尾时,那么它相对于文件开头的位移量就是文件的长度。

【程序代码】

#include <stdio.h>

main()

{

    FILE *fp;

    long len;

 

    if((fp=fopen("c:\\test.txt","r"))==NULL)/*打开文件c:\test.txt*/

    {

        printf("Can’t open this file.\n"); 

        exit(0); 

    }

    fseek(fp,0L,SEEK_END);           /*文件的位置指针移动到文件的末尾*/

    len=ftell();                     /*函数的返回值即是文件的当前位置*/

    fclose(fp);

 

    if(-1L!=len)                     /*如果ftell函数返回值为-1L,表示出错*/

        printf("File’s length:%ld\n",len);

    else

    printf("Error\n");

}

【运行结果】

File’s length:文件的实际长度

【知识拓展】

什么是文件的位置指针?文件中有一个位置指针,指向当前读写的位置。如果顺序读写文件,那么每次读写完一个字符,文件的位置指针都会向后移动一个字符位置。如果想让文件位置指针指向文件中其他位置,就需要使用定位函数。

1rewind( ):使位置指针重新移动到文件的开头位置,没有函数返回值。

2fseek( ):移动文件的位置指针,调用成功返回0,调用失败返回非0

函数原型为int fseek(FILE *fp,long offset,int whence);,其中,fp为文件类型指针,offset为位移量,Whence为起始点。Whence是一个枚举常量,可以是以下几个值。

·    SEEK_SET:从文件开始。

·    SEEK_CUR:从文件当前位置。

·    SEEK_END:从文件末尾。

当然,Whence也可以用012代替(枚举常量是有值常量,C语言编译器按定义时的顺序使它们的值为012…)。

fseek(fp,100L,SEEK_SET);    /*表示位置指针从文件头向后移动100个字节*/

fseek(fp,50L,SEEK_CUR);     /*表示位置指针从当前位置向后移动50个字节*/

fseek(fp,-10L,SEEK_END);    /*表示位置指针从文件末尾向前移动50个字节*/

利用ftell( )函数可以得到文件位置指针的当前位置,如果函数返回值为-1L,表示出错。

if(-1L==ftell(fp))  printf("Error\n");

案例11.4  复制文件

【项目任务】

为一个磁盘文件test.dat复制一个副本,文件名为copy.dat

【设计思路】

以读的方式打开文件test.dat,以写的方式新建文件copy.dat,然后将文件test.dat依次读出,并写到文件copy.dat中,完成文件的复制。

【程序代码】

#include <stdio.h>

main()

{

    FILE *fp1,*fp2;

    char ch;

 

    if((fp1=fopen("c:\\test.txt","r"))==NULL)    /*以读的方式打开一个文件*/

    {

        printf("Can’t open this file.\n"); 

        exit(0); 

    }

    if((fp2=fopen("c:\\copy.dat","w"))==NULL)    /*以写的方式打开一个文件*/

    {

        printf("Can’t open this file.\n"); 

        exit(0); 

    }

    ch=fgetc(fp1);

    while(ch!=EOF)                               /*判断文件是否结束*/

    {

        fputc(ch,fp2);

        ch=fgetc(fp1);

    }

    fclose(fp1);

    fclose(fp2);

}

【运行结果】

c盘中,有磁盘文件test.da的副本copy.dat

【知识拓展】

1.对于二进制文件,读写文件中数据的代码应改写为:

while(!feof(fp1))   /*判断文件是否结束*/

{

    ch=fgetc(fp1);

    fputc(ch,fp2);

}

2.在调用各种输入/输出函数时,如果担心发生错误,可以使用ferror( )函数来检测,它的一般调用形式为ferror(fp)。如果返回0,表示未出错;否则,表示出错。

本章主要介绍了文件的相关知识,因为文件在程序设计中是一个重要的概念。在C语言中,没有专门的输入/输出语句,对文件的操作都是通过库函数来完成的。一般来说,对文件的操作应遵循以下过程:

1)确定文件的文件类型(文本文件、二进制文件)。

2)定义一个文件指针。

3)使文件指针指向一个以某种方式打开的文件。

4)对文件进行读/写操作,关闭文件。