169 votes

Créer un répertoire s'il n'existe pas avec Ruby

J'essaie de créer un répertoire avec le code suivant:

 Dir.mkdir("/Users/Luigi/Desktop/Survey_Final/Archived/Survey/test")
    unless File.exists?("/Users/Luigi/Desktop/Survey_Final/Archived/Survey/test")  
 

Cependant, je reçois cette erreur:

Aucun fichier ou répertoire de ce type - / Utilisateurs / Luigi / Desktop / Survey_Final / Archivé / Survey / test (Errno :: ENOENT)

Pourquoi ce répertoire n'est-il pas créé par l'instruction Dir.mkdir ci-dessus?

280voto

zrl3dx Points 3216

Vous êtes probablement en train de créer des répertoires imbriqués. En supposant foo n'existe pas, vous recevrez no such file or directory d'erreur:

Dir.mkdir 'foo/bar'
# => Errno::ENOENT: No such file or directory - 'foo/bar'

Pour créer des listes de répertoires à la fois, FileUtils est nécessaire:

require 'fileutils'
FileUtils::mkdir_p 'foo/bar'
# => ["foo/bar"]

Edit2: vous n'avez pas à utiliser FileUtils, vous pouvez faire appel système (mise à jour à partir de @mu est trop court commentaire):

> system 'mkdir', '-p', 'foo/bar' # worse version: system 'mkdir -p "foo/bar"'
=> true

Mais cela semble (au moins pour moi) comme la plus mauvaise approche que vous êtes en utilisant un "outil" qui peut ne pas être disponible sur certains systèmes (même si j'ai du mal à imaginer le système sans l' mkdir, mais qui sait).

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