3

fread() の呼び出しが 0 を返し、ferror() が (EOF に対して) エラーを示している場合、読み取りを再試行しても問題ありませんか、それともファイルを閉じてから再度開いた方がよいでしょうか?

完全にやり直すことはできません -- 入力ファイルが部分的に処理されており、元に戻すことはできません (たとえば、一度にチャンクをソケットに書き込んでいて、既存のプロトコルのために方法がありません)。リモートエンドに「気にしないで、最初からやり直す必要がある」と伝えること)。

ファイルを fclose() および fopen() し、既に処理されたデータを fseek() して、そこから fread() を続行することはできますが、それだけで十分でしょうか?

4

3 に答える 3

6

エラーごとに異なる処理が必要になる可能性があるため、「万能」な解決策はありません。からのエラーfread()は異常です。正しく呼び出している場合、エラーはFILE*、奇妙なエラー状態のままになっている状況を示している可能性があります。その場合fclose()、 、fopen()fseek()を呼び出して、物事を良好な状態に戻すのが最善です。

何か起こっていることをコーディングしている場合は、実際に発生しているエラーについて言及してくださいferror()...

于 2009-04-24T16:20:31.720 に答える
6

clearerr機能を見てもらうことができます。

于 2009-04-24T16:23:10.340 に答える
0

または を使用してユーザーにエラーを表示し、再試行するperror()かどうかstrerror()を尋ねることができます。

ただし、実装がそのようなエラー メッセージを提供することは必須ではありません。errno呼び出す前に 0 に設定する必要がありfread()ます。失敗しerrnoてまだ 0 の場合、エラー情報は利用できません。

于 2009-04-24T16:46:43.620 に答える