/* 解题思路: 以只读方式打开某一文件,然后将文件指针定位在文件结尾的位置,利用ftell函数返回指针的在文件中的相对位置即可。
*/
#include "stdio.h"main()
{ FILE *fp /*定义文件指针*/
long cnt /*定义变量cnt用来存储文件大小数据*/
fp=fopen("c:\\1.txt","r") /*此处请填写测试文件的地址,并以只读("r")方式打开并旅销文件*/
if( fp==NULL ) /*如果打开的文件不存在,则退出*/
{ exit(0)
printf("文件打开失败!")
}
fseek(fp,0L,SEEK_END) /*利用fseek函数将指针定位在文件结尾的位置*/
cnt=ftell(fp) /*利用ftell函数返回指针相对于文件开头的位置,以字节计绝游算*/
镇没 printf("文件所占的字节数为%ld个\n",cnt) /*进行输出*/
}
我测试了你的代轿正岁码:
#include<stdio.h>#include<string.h>
#include<stdlib.h>
void main()
{
FILE *p=fopen("d:\\jiuibf.txt","rt")
int length = 0
for(fgetc(p)!=EOFlength++)
fclose(p)
printf("第闭睁一种方式,文件长度=%d\n",length)
p=fopen("d:\\jiuibf.txt","rb")
fseek(p,0,2)
length=ftell(p)
fclose(p)
printf("第二种方式,文件长度=%d\n",length)
}
文本文件的内容是:
FILE *p=("jiuibf.txt","rt")
int length
for(fgetc(p)!=EOFlength)
FILE *p=(jiuibf.txt","rb")
int length
fseek(p,0,2)
length=ftell(p)
程序的输出是:
原因分析:
在windows下,以文本方式写入文件的\n会被转换为\r\n(也就是0x0D0A),输出的时候,\r\n会被转换回\n。
fgetc在读入时会将\r\n转换成一个\n;上面的文本文件有6个回车换行。
所以第一种方式比第二种方式清指少6
C语言获得文件的长度方式就是第二种:
FILE*fpfp=fopen("localfile","rb")// localfile文件名
fseek(fp,0,SEEK_SET)
fseek(fp,0,SEEK_END)
long longBytes=ftell(fp)// longBytes就是文件的长度
你可以用程序open文件,用fgetc读文件,比并枯较读入的byte个数。用二进制打开。
FILE *fin
int c,N=0,N2=0
char filename1[32]="a.txt"
char filename2[32]="a.dat"
if ( (fin = fopen(filename1,"rb") ) == NULL ) {
printf("\007Cann't open input file %s\n",filename1)exit(1)
}
while (!feof(fin)) {
c= fgetc(fin)
N=N+1
}
fclose (fin)
printf ("Total number of bytes: %d in %s\n",N,filename1)
if ( (fin = fopen(filename2,"rb") ) == NULL ) {
printf("\搏判007Cann't open input file %s\n",filename2)exit(1)
}
while (!feof(fin)) {
c= fgetc(fin)
N2=N2+1
}
fclose (fin)
printf ("Total number of bytes: %d in %s\n"基蔽改,N2,filename2)
// 比较N何N2
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)