2009-08-13 12 views

Répondre

13

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 
+1

+1 Pour une meilleure réponse. – Swanand

+1

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 '{}' \;" –

9

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 
+1

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

+0

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

+0

si ces deux sont à peu près équivalent pour la gestion de fichiers, aide un peu. merci – Tony