什么是Ruby文件I / O中的EOFError?
官方文档没有说明。 我理解EOFError的意思是“文件结束错误”,但究竟是什么意思呢? 如果文件阅读器到达文件的末尾,那对我来说听起来不是一个错误。
EOFError在所有IO中都很方便,这个类是ruby中所有输入/输出的基础。 现在还要记住核心的Unix概念:一切都是文件。 这包括套接字。 因此,如果您打开一些套接字并正在读取它,则exception情况可能是遇到文件结尾。
所有的例子都显示了EOFError(在阅读一些文本文件时)的微不足道的用法,这些用法并不是很有用。 但是,开始挖掘net / http或其他大量使用套接字的类,你会看到使用这个exception。
编辑从net / ftp添加此示例
def getline line = @sock.readline # if get EOF, raise EOFError line.sub!(/(\r\n|\n|\r)\z/n, "") if @debug_mode print "get: ", sanitize(line), "\n" end return line end
当您尝试对已经引用文件末尾的文件对象执行操作时,将引发EOFError(文件结束错误)。 在这个例子中,我们试图在行不存在时readline
。
例如:
import_file = File.open(filename) begin while (line = import_file.readline) sline = FasterCSV.parse_line(line) # Do stuff with sline end rescue EOFError # Finished processing the file end
没有EOFError可以实现同样的目的:
File.open(filename).each do |line| sline = FasterCSV.parse_line(line) # Do stuff with sline end