Что такое ошибка EOFError при вводе-выводе файлов Ruby?

В официальной документации ничего не указано. Я понимаю, что EOFError означает «Ошибка конца файла», но что именно это означает? Если средство чтения файлов достигает конца файла, для меня это не похоже на ошибку.


person Tony    schedule 13.08.2009    source источник


Ответы (2)


EOFError удобен во всех IO, классе, который является основой всего ввода/вывода в ruby. Теперь также вспомните основные концепции 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
person Community    schedule 13.08.2009
comment
Спасибо Свананд. Я обязан кодом примера моему любимому использованию find... find /usr/lib/ruby/1.8/net/ -name *.rb -exec grep EOFError /dev/null '{}' \; - person ; 13.08.2009

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
person Swanand    schedule 13.08.2009
comment
Спасибо за ответ. Я понимаю, что EOFError означает Конец ошибки файла. но что именно это означает? Если читатель доходит до конца файла, мне это не кажется ошибкой. - person Tony; 13.08.2009
comment
Извините, как глупо с моей стороны не принять во внимание. Я обновил ответ, но я думаю, что он все еще не может ответить на ваш вопрос. - person Swanand; 13.08.2009
comment
если эти два в значительной степени эквивалентны для обработки файлов, это немного помогает. Благодарность - person Tony; 13.08.2009