4

我正在尝试用 fread 读取一个空文件。在我创建块大小为 4096 且数量为 40 块的文件之前。目前我知道这些块是“空的”,但是如果我像下面的代码一样读取文件,我无法判断它是否为空。我的意思是我希望 nread 为 NULL 或类似的东西。你知道我必须将 nread 与什么进行比较吗?谢谢!

int test()
{

   char buf[4096];
   FILE *file;
   size_t nread;

   file = fopen("out/abc.store", "r");
   if (file) {
       while ((nread = fread(buf, 1, sizeof buf, file)) > 0)
          fwrite(buf, 1, nread, stdout);
      if (ferror(file)) {
      /*error handling*/
   }
   fclose(file);
}

编辑:

我这样创建了文件:

char *content=(char*)malloc(uintBlockSize*uintBlockCount);
memset(content,0,uintBlockSize*uintBlockCount);
...
 while (i!=0)
 {
   check=fwrite(content,uintBlockSize, 1, storeFile);
   if (check!=1)
       return 1;
   i--;
 }
4

2 回答 2

1

检查是否fread返回 0。从文档(此处):

返回成功读取的元素总数。

于 2013-08-15T14:56:54.603 回答
-1

fread 将返回成功读取元素的数量,因此在这种情况下,fread 将返回 0(假设它没有读取任何内容),如果是结束则返回 EOF。

于 2013-08-15T14:59:00.100 回答