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

我无法完全重新开始 - 输入文件已以无法撤消的方式进行了部分处理(假设我一次向套接字写出一个块,并且由于现有协议(protocol),无法告诉远端,“没关系,我需要重新开始”)。

我可以 fclose() 和 fopen() 文件, fseek() 过去已经处理过的数据,然后从那里继续 fread() ing,但这是否有必要?

最佳答案

没有“一刀切”的解决方案,因为不同的错误可能需要不同的处理方式。来自 fread() 的错误是不寻常的;如果您正确调用它,则错误可能表明 FILE* 处于奇怪错误状态的情况。在这种情况下,您最好调用 fclose()fopen()fseek() 以使事情恢复到良好状态。

如果您正在为正在发生的事情编码,请提及您从 ferror() 得到的实际错误......

关于c++ - 从 fread() 失败中恢复的好方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/786547/

10-14 13:25