【项目任务】
编写一个程序,求一个文件的长度。
【设计思路】
打开一个文件,通过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:文件的实际长度
【知识拓展】
什么是文件的位置指针?文件中有一个位置指针,指向当前读写的位置。如果顺序读写文件,那么每次读写完一个字符,文件的位置指针都会向后移动一个字符位置。如果想让文件位置指针指向文件中其他位置,就需要使用定位函数。
(1)rewind( ):使位置指针重新移动到文件的开头位置,没有函数返回值。
(2)fseek( ):移动文件的位置指针,调用成功返回0,调用失败返回非0。
函数原型为int fseek(FILE *fp,long offset,int whence);,其中,fp为文件类型指针,offset为位移量,Whence为起始点。Whence是一个枚举常量,可以是以下几个值。
· SEEK_SET:从文件开始。
· SEEK_CUR:从文件当前位置。
· SEEK_END:从文件末尾。
当然,Whence也可以用0,1,2代替(枚举常量是有值常量,C语言编译器按定义时的顺序使它们的值为0,1,2…)。
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");
【项目任务】
为一个磁盘文件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)对文件进行读/写操作,关闭文件。