Le official documentation ne spécifie pas. Je comprends EOFError signifie "Fin de l'erreur de fichier", mais qu'est-ce que cela signifie exactement? Si un lecteur de fichier atteint la fin d'un fichier, cela ne me semble pas une erreur.Qu'est-ce qu'un EOFError dans les E/S de fichiers Ruby?
Répondre
EOFError est à portée de main dans toutes les IO, la classe qui est la base de toutes les entrées/sorties en rubis. Maintenant, souvenez-vous aussi des concepts de base Unix: tout est un fichier. Cela inclut les prises. Donc, si vous avez une socket ouverte et que vous en lisez, une condition exceptionnelle pourrait être de rencontrer une fin de fichier.
Tous les exemples présentés ici montrent des utilisations triviales de EOFError (lors de la lecture d'un fichier texte), qui ne sont pas vraiment utiles. Cependant, commencez à creuser via net/http ou d'autres classes qui utilisent fortement les sockets, et vous verrez cette exception utilisée.
Edité pour ajouter cet exemple de net/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 (erreur de fin de fichier) est levée lorsque vous essayez d'effectuer une opération sur un objet de fichier qui fait déjà référence à la fin du fichier. Dans cet exemple, nous essayons de readline
lorsque la ligne n'existe pas.
Par exemple:
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
La même chose peut être atteint sans la EOFError:
File.open(filename).each do |line|
sline = FasterCSV.parse_line(line)
# Do stuff with sline
end
Merci pour la réponse. Je comprends que EOFError signifie "Erreur de fin de fichier". Mais qu'est ce que cela veut dire exactement? Si le lecteur atteint la fin du fichier, cela ne me semble pas une erreur. – Tony
Désolé, comment stupide de ne pas considérer. J'ai mis à jour la réponse, mais je suppose que cela ne répondra peut-être pas à votre question. – Swanand
si ces deux sont à peu près équivalent pour la gestion de fichiers, aide un peu. merci – Tony
+1 Pour une meilleure réponse. – Swanand
Merci Swanand. Je dois l'exemple de code à mon utilisation favorite de find ... "find /usr/lib/ruby/1.8/net/ -name * .rb -exec grep EOFError/dev/null '{}' \;" –