14.2.18 End of File and Errors

Last-modified: 2025-03-16 (日) 13:55:09

14.2.18 ファイルの終わりとエラー

ファイルが開かれると、そのステータスを取得できます。たとえば、feof関数はファイルの末尾に到達したかどうかを判断します。これは、一度にファイルの小さな部分を読み取る場合に非常に便利です。次の例は、末尾に到達するまでファイルから一度に 1 行ずつ読み取る方法を示しています。

filename = "myfile.txt";
fid = fopen (filename, "r");
while (! feof (fid) )
text_line = fgetl (fid);
endwhile
fclose (fid);

状況によっては、ファイルを 1 行ずつ読み取るよりも、ファイルの内容全体を読み取ってから処理する方が効率的であることに注意してください。これには、上記のコードのループを削除できるという潜在的な利点があります。

: status = feof (fid)
ファイル記述子fidで指定されたファイルでファイル終了条件が発生した場合は 1 を返し、それ以外の場合は 0 を返します。

feofファイルの終わりに既に達している場合にのみ 1 が返され、次の読み取り操作でファイルの終わりの状態になる場合は 1 が返されないこと に注意してください。

参照: fread、frewind、fseek、fclear、fopen。

: msg = ferror (fid)
: [msg, err] = ferror (fid)
: […] = ferror (fid, "clear")
ファイル記述子fidで指定されたストリームのエラー ステータスを照会します。

エラー状態が存在する場合は、エラーを説明する文字列msg""を返します。それ以外の場合は、空の文字列を返します。

2 番目の入力"clear"はオプションです。指定すると、ストリーム上のエラー状態がクリアされます。

オプションの 2 番目の出力は、エラー状態を示す数値です。 エラー状態が発生した場合、 errは 1 になり、それ以外の場合は 0 になります。

ferrorこれは、次の操作でエラー状態が発生するかどうかではなく、エラーがすでに発生しているかどうかを示している ことに注意してください。

参照: fclear、fopen。

: fclear (fid)
ファイル記述子fidで指定されたファイルのストリーム状態をクリアします 。

参照: ferror、fopen。

: freport ()
開かれたファイルと、それらのファイルが読み取り用、書き込み用、またはその両方で開かれているかどうかのリストを印刷します。

例えば:

freport ()
   -|  number  mode  arch       name
   -|  ------  ----  ----       ----
   -|     0     r    ieee-le    stdin
   -|     1     w    ieee-le    stdout
   -|     2     w    ieee-le    stderr
   -|     3     r    ieee-le    myfile

See also: fopen, fclose, is_valid_file_id.