我正在编写一个非常简单的C程序来计算文件的大小。我在计算text,.odt和二进制文件方面都取得了成功。但是,在我对代码进行了一些小的更改之后,我得到了.odt和二进制文件的不同结果。
这是我的代码,可以提供正确的结果:
while(fgetc(pFile)!=EOF) size++;
这就是为二元和odt文件提供不同和错误结果的那个(我无法理解它为什么不同?)
size=0;
c=fgetc(pFile);
while(c!=EOF)
{
c=fgetc(pFile);
size++;
}
注意:此代码为文本文件提供了正确的结果。
这是整体代码(功能):
int count(char * file)
{
int size;
char c;
FILE * pFile;
size=0;
c=' ';
pFile = fopen(file, "rb");
if(!pFile)
{
printf("Invalid file(%s)!\n",file);
exit(EXIT_SUCCESS);
}
c=fgetc(pFile);
while(c!=EOF)
{
c=fgetc(pFile);
size++;
}
// while(fgetc(pFile)!=EOF) size++;
fclose(pFile);
return size;
}
答案 0 :(得分:1)
我很确定这是c
的声明。这是一些有效的示例代码。
#include <stdio.h>
#include <errno.h>
int fsize(char *s)
{
FILE *pF = NULL;
int c = 0; /* declaring this as char will bring you funny results */
int iSize = 0;
pF = fopen(s, "r");
if (! pF)
{
perror("Cannot open file");
return -1;
}
fseek(pF, 0, SEEK_SET);
while(EOF != (c = fgetc(pF)))
iSize ++;
fclose(pF);
return iSize;
}
int main(int argc, char **argv)
{
int i;
for(i = 1; argc > i; i ++)
printf("%10d %s\n", fsize(argv[i]), argv[i]);
return 0;
}
答案 1 :(得分:-2)
我不确定你是什么意思&#34;计算文件的大小&#34;。 但是如果你想要文件大小,
我希望以下代码。
#include <sys/stat.h>
struct stat sbuf;
stat(filepath, &sbuf);
printf("%jd\n", (intmax_t)sbuf.st_size);
答案 2 :(得分:-2)
我相信你的文件大小比实际大小要小一些
我认为造成这种情况的原因是c=fgetc(pFile);
被写了两次。一个在外面,一个在里面。控件执行第一个c=fgetc(pFile);
,一次又一次进入内部,同时执行c=fgetc(pFile);
而不增加大小。
size=0;
c=fgetc(pFile);
if(c!=EOF)
{
size++;
}
while(c!=EOF)
{
c=fgetc(pFile);
size++;
}
这里,如果文件为空,fgetc将返回EOF。因此,只有当c返回的值不是EOF时,我们才会增加。 这应该解决这个问题。希望这有帮助。