Что такое EOFError в Ruby file I / O?
Вопрос
Тот самый официальная документация не уточняет.Я понимаю, что 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