Ruby文件I/O中的EOFError是什么?

Ruby文件I/O中的EOFError是什么?,ruby,file-io,eoferror,Ruby,File Io,Eoferror,没有具体说明。我理解EOFError的意思是“文件结束错误”,但这到底是什么意思?如果文件读取器到达文件的结尾,我觉得这不是一个错误。当您试图对已经引用文件结尾的文件对象执行操作时,会抛出EOFError(文件结尾错误)。在本例中,我们试图在该行不存在时读取该行 例如: import_file = File.open(filename) begin while (line = import_file.readline) sline = FasterCSV.parse_line(lin

没有具体说明。我理解EOFError的意思是“文件结束错误”,但这到底是什么意思?如果文件读取器到达文件的结尾,我觉得这不是一个错误。

当您试图对已经引用文件结尾的文件对象执行操作时,会抛出EOFError(文件结尾错误)。在本例中,我们试图在该行不存在时读取该行

例如:

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

EOFError在所有IO中都很方便,该类是ruby中所有输入/输出的基础。现在还要记住Unix的核心概念:一切都是一个文件。这包括插座。所以,如果您打开了一些套接字并正在从中读取,一个例外情况可能是遇到文件结尾

所有的例子都显示了EOFError的琐碎用途(在读取一些文本文件时),但这些都不是真正有用的。然而,开始深入研究net/http或其他大量使用套接字的类,您将看到使用了这个异常

编辑以从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的意思是“文件结束错误”。但这到底意味着什么?如果读者到达文件的末尾,那对我来说就不算是一个错误。对不起,我不考虑是多么愚蠢。我更新了答案,但我想它可能仍然无法回答您的问题。如果这两种方法在文件处理方面几乎相同,则会有所帮助。谢谢汉克斯·斯瓦南德。我把示例代码归功于我最喜欢使用的find。。。“查找/usr/lib/ruby/1.8/net/-name*.rb-exec grep eoferor/dev/null'{}'\;”