2012-09-09 104 views
30

我想在Ruby中删除一个非空目录,不管我以哪种方式去做它都拒绝工作。 我一直在使用文件实用程序,系统调用,递归进入指定的目录,并删除一切,但似乎总是与落得(临时?)文件试图如Ruby删除目录

.__ afsECFC
.__ afs73B9

任何人都知道为什么会发生这种情况,我如何能够绕过它?

+0

你能告诉我们你如何你调用什么方法,你如何叫它?我之所以问,是因为@ismaelga的答案对我来说也很好。 –

+0

我试过使用 'FileUtils.rm_rf('directorypath/name')' as @ismealga建议,以及 ''rm -rf @ {path}'' 但是由于我没有正确关闭我的文件,他们正在创建那些临时的 – Ced

回答

9

实现了我的错误,一些文件还没有关闭。 我刚才在我的节目,我是用

File.open(filename).read 

,我换了一个

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

现在

FileUtils.rm_rf(dirname) 

完美的作品

+5

如果您只是阅读完整文件,则可以执行File.read文件名'(至少在MRI中,我不认为JRuby或Rubinius支持这一点),如果你想按照你展示的方式来做,最好使用块形式,因为它确保文件被关闭: 'File.open(filename,“r”){| file | ...}或File.foreach(filename){| line | ...} –

80
require 'fileutils' 

FileUtils.rm_rf('directorypath/name') 

这不工作?

+0

不,它会创建这些文件,并且不会删除目录 – Ced

+0

是否可以因为您没有删除它们的权限? –

+0

我很确定我有权更改它们,因为它们是在同一个程序中创建的,我可以删除单个文件而不会造成问题 – Ced

26

安全的方法:FileUtils.remove_dir(somedir)

+3

这是正确的答案 – Sam

4

我想最好的方法,以消除所有内容的目录“不使用aditional的LIB”使用简单的递归方法:

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)