当我使用的fread(C语言)从文件中读取,的fread的返回值有时会是0做fread和fwrite有失败?如何处理这个?
作为手动建议:
的fread()和fwrite()返回的数项目成功阅读或 书面
我必须写这样的代码吗?
int bytes_read;
while((bytes_read = fread(buffer, sizeof(int), 1, fp)) == 0) {
}
我们是否一定要检查fread或fwrite是否成功?
当我使用的fread(C语言)从文件中读取,的fread的返回值有时会是0做fread和fwrite有失败?如何处理这个?
作为手动建议:
的fread()和fwrite()返回的数项目成功阅读或 书面
我必须写这样的代码吗?
int bytes_read;
while((bytes_read = fread(buffer, sizeof(int), 1, fp)) == 0) {
}
我们是否一定要检查fread或fwrite是否成功?
不,如果fread
或fwrite
返回的读取或写入的记录数少于预期的数量,那么执行此类重试循环没有意义。也就是说,stdio不像可导致“短”读取或写入的低级别read
和write
操作。
如果fread
返回的记录数少于所请求的数量,则表明您已经发生EOF或严重的读取错误。您可以通过检查feof()
和ferror()
来区分它们。
同样,如果fwrite
返回的请求数少于记录数,则表示磁盘空间不足或发生严重的写入错误。
在任何情况下,由于缓冲stdio使得基本上不可能知道成功写入了多少,因此如果遇到写入错误,通常需要考虑文件丢失并中止整个操作。
是的。
返回值应始终为计数。
如果不是 - 您应该使用ferror()
或feof()
来确定您是否已达到文件末尾和/或遇到错误。
忽略错误和/或意外情况是不可靠的软件在不知情的用户身上发生的事情。
http://www.cplusplus.com/reference/clibrary/cstdio/fread/
< - 垃圾
http://pubs.opengroup.org/onlinepubs/000095399/functions/fread.html
http://pubs.opengroup.org/onlinepubs/000095399/functions/fread.html
成功完成后,FREAD()应仅当遇到读取错误或文件结束时,才返回小于nitems的成功读取元素的数量。如果size或nitems是0,fread()应该返回0,并且数组的内容和流的状态保持不变。否则,如果发生读取错误,则应设置流的错误指示符,并且应设置errno来指示错误。
http://pubs.opengroup.org/onlinepubs/007904875/functions/fwrite.html
和fwrite()函数将返回成功写入元件的数量,其可以是比NITEMS更少如果遇到写入错误。如果size或nitems为0,fwrite()应该返回0,并且流的状态保持不变。否则,如果发生写入错误,应设置流的错误指示符,并设置errno以指示错误。必须使用ferror()或feof()函数来区分错误条件和文件结束条件。
如果fread失败,它通常会保持失败。通常是因为它碰到文件的结尾,但可能出于其他原因。如果失败,你通常不会再试一次。
否,当整个操作成功时,返回值是'count',而不是'size * count'。 – 2012-02-22 05:56:16
@R .. - 呃......我不认为这是正确的。你确定?你有不同意我发布的文档? – Steve 2012-02-22 05:57:22
@R .. - 我敢肯定,如果你要求“5”大小的“10”项目的回应应该是“50”而不是“5”。 – Steve 2012-02-22 05:58:17