Вопрос

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

Это было полезно?

Решение

EOFError удобен во всех IO, классе, который является основой всего ввода-вывода в ruby.Теперь также вспомните основные концепции Unix:все представляет собой файл.Это включает в себя розетки.Итак, если у вас открыт какой-то сокет и вы читаете из него, исключительным условием может быть обнаружение конца файла.

Все приведенные там примеры показывают тривиальное использование EOFError (при чтении некоторого текстового файла), которое на самом деле бесполезно.Однако начните копаться в net / 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

Другие советы

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top