14.2.18 文件结束和错误

文件一旦被打开,就可以获取其状态。例如,feof 函数用于确定是否已到达文件的末尾。这在一次只读取文件的一小部分时非常有用。下面的示例展示了如何从文件中逐行读取,直到文件末尾。

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

请注意,在某些情况下,一次性读取整个文件内容再进行处理,比逐行读取效率更高。这样做还有一个潜在的优势,即可以省去上面代码中的循环。

 
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。否则,返回一个空字符串 ""

第二个输入参数 "clear" 是可选的。如果提供了该参数,则会清除该流上的错误状态。

可选的第二个输出是错误状态的数值指示。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

另请参阅: fopen, fclose, is_valid_file_id.


版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-4