В официальной документации ничего не указано. Я понимаю, что EOFError означает «Ошибка конца файла», но что именно это означает? Если средство чтения файлов достигает конца файла, для меня это не похоже на ошибку.
Что такое ошибка EOFError при вводе-выводе файлов Ruby?
Ответы (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
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