什么是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 
Interesting Posts