-->

什么是Ruby中引发EOFError文件I / O?(What is an EOFError in

2019-09-23 12:03发布

在官方文件没有明确规定。 我理解的EOFError意味着“文件错误的终结”,但究竟是什么意思? 如果一个文件阅读器到达文件末尾,这听起来不像是一个错误给我。

Answer 1:

引发EOFError是在所有的IO,它是在红宝石所有输入/输出的基础类的方便。 现在还记得Unix核心理念:一切皆文件。 这包括插座。 所以,如果你有一些套接字打开,并从它在读书,一个特殊的条件可能是遇到文件的末尾。

所有的例子在那里展示的EOFError琐碎的用途(在阅读一些文本文件),这是不是真的有用。 然而,开始通过网/ HTTP或大量使用插座其他类挖掘,你会看到正在使用此异常。

编辑从净/ 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


Answer 2:

引发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


文章来源: What is an EOFError in Ruby file I/O?