使用fread读取空文件

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--;
 }

7
如果你创建文件的大小大于零,它就不是空的。 - Carey Gregory
2
请不要在C语言中将malloc()的返回值强制转换。 - unwind
告诉我如何删除这个问题 :D - SevenOfNine
1
问题下方应该有一个直接删除的链接。 - Carey Gregory
请不要破坏你的问题。如果你想删除它,请标记,但要给出一个好的理由。 - Flexo
2个回答

1

检查fread是否返回0。根据文档(这里):

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


我觉得我在问题上犯了一个错误,文件不是空的。但是我创建它的方式就像我在编辑中写的那样。 - SevenOfNine
它不会返回零。它将返回4096,并且这样做40次。 - Carey Gregory
很抱歉,我能否以某种方式删除这个问题? - SevenOfNine
@user2430568 - 是的,您可以删除自己的问题。或者您可以编辑它以澄清您的问题。 - Carey Gregory
那么我该如何删除它? - SevenOfNine

-1

fread将返回成功读取的元素数量,因此在这种情况下,如果它没有读取任何内容,fread将返回0,如果到达结尾,将返回EOF。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接