首页 文章

从fread()失败中恢复的好方法是什么?

提问于
浏览
3

如果对fread()的调用返回0并且ferror()指示错误(相对于EOF),是否可以重试读取或是否更好地关闭并重新打开文件?

我无法完全重新开始 - 输入文件已被部分处理,无法撤消(比如我一次写出一个块到套接字,并且由于现有协议,没有办法告诉远程端,“没关系,我需要重新开始”) .

我可以fclose()和fopen()文件,fseek()超过已经处理过的数据,并从那里继续fread() - 但这是必要的吗?

3 回答

  • 6

    没有"one size fits all"解决方案,因为不同的错误可能需要不同的处理 . 来自 fread() 的错误是不寻常的;如果您正确调用它,则错误可能表示情况已使 FILE* 处于奇怪的错误状态 . 在这种情况下,你最好调用 fclose()fopen()fseek() 来恢复状态 .

    如果您发生了're coding for something that',请提及您从 ferror() 获得的实际错误...

  • 6

    你可以看一下clearerr函数 .

  • 0

    您可以使用 perror()strerror() 向用户显示错误,并询问她是否要重试 .

    但是,实现并不强制要求提供此类错误消息 . 在调用 fread() 之前,应将 errno 设置为0;如果失败且 errno 仍然为0,则不会有错误信息 .

相关问题