web-dev-qa-db-fra.com

Ruby suppression de répertoires

J'essaie de supprimer un répertoire non vide dans Ruby et peu importe la façon dont je le fais, il refuse de fonctionner. J'ai essayé d'utiliser FileUtils, des appels système, récursivement dans le donné répertoire et tout supprimer, mais semblent toujours se retrouver avec des fichiers (temporaires?) tels que

.__ afsECFC
.__ afs73B9

Quelqu'un sait pourquoi cela se produit et comment je peux le contourner?

43
Ced

J'ai réalisé mon erreur, certains fichiers n'avaient pas été fermés. Plus tôt dans mon programme, j'utilisais

File.open(filename).read

que j'ai troqué contre un

f = File.open(filename, "r")
while line = f.gets
    puts line
end
f.close

Et maintenant

FileUtils.rm_rf(dirname)

fonctionne parfaitement

10
Ced
require 'fileutils'

FileUtils.rm_rf('directorypath/name')

Ça ne marche pas?

90
Ismael Abreu
51
merqlove

Je suppose que la meilleure façon de supprimer un répertoire avec tout votre contenu "sans utiliser de bibliothèque supplémentaire" est d'utiliser une méthode récursive simple:

def remove_dir(path)
  if File.directory?(path)
    Dir.foreach(path) do |file|
      if ((file.to_s != ".") and (file.to_s != ".."))
        remove_dir("#{path}/#{file}")
      end
    end
    Dir.delete(path)
  else
    File.delete(path)
  end
end
remove_dir(path)
5
JonatasTeixeira