175 votes

Comment vérifier si un répertoire donné existe dans Ruby

J'essaie d'écrire un script qui extrait ou met à jour automatiquement une URL de subversion selon qu'un répertoire spécifié existe ou non, mais pour une raison quelconque, mon code ne fonctionne pas et retourne toujours true, même si c'est faux.

Le code:

 def directory_exists?(directory)
  return false if Dir[directory] == nil
  true
end
 

Est-ce que quelqu'un peut m'aider? Qu'est-ce que je fais mal?

306voto

Emily Points 9231

Si le fait que le fichier que vous recherchez soit un répertoire et pas seulement un fichier compte, vous pouvez utiliser File.directory? ou Dir.exists? . Cela retournera true uniquement si le fichier existe et est un répertoire.

En passant, une façon plus idiomatique d'écrire la méthode serait de profiter du fait que Ruby renvoie automatiquement le résultat de la dernière expression à l'intérieur de la méthode. Ainsi, vous pourriez l'écrire comme ceci:

 def directory_exists?(directory)
  File.directory?(directory)
end
 

46voto

MattDiPasquale Points 23842

Vous pouvez également utiliser Dir::exists ? comme suit :

45voto

Andrew Points 30079

Toutes les autres réponses sont correctes, cependant, vous pouvez avoir des problèmes si vous essayez de vérifier le répertoire dans le répertoire personnel d'un utilisateur. Assurez-vous de développer le chemin relatif avant de vérifier:

 File.exists? '~/exists'
=> false
File.directory? '~/exists'
=> false
File.exists? File.expand_path('~/exists')
=> true
 

18voto

cloudhead Points 10279

``

retourne un tableau, de sorte qu’il ne sera jamais -si vous voulez faire à votre manière, vous pourriez faire qui retourne si elle n’a pas été trouvé.

7voto

jtzero Points 673

vous pouvez utiliser Kernel #test

``

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X