Ruby删除目录

Ced*_*Ced 45 ruby directory

我正在尝试删除Ruby中的非空目录,无论我采用哪种方式它都拒绝工作.我已经尝试过使用FileUtils,系统调用,递归进入给定目录并删除所有内容,但似乎总是以(临时?)文件结束,例如

.__ afsECFC
.__ afs73B9

任何人都知道为什么会发生这种情况以及如何解决这个问题?

Ism*_*reu 91

require 'fileutils'

FileUtils.rm_rf('directorypath/name')
Run Code Online (Sandbox Code Playgroud)

这不行吗?


mer*_*ove 54

安全方法: FileUtils.remove_dir(somedir)

  • 是什么让它“安全”? (6认同)

Ced*_*Ced 10

实现了我的错误,一些文件还没有关闭.我之前在我使用的程序中

File.open(filename).read
Run Code Online (Sandbox Code Playgroud)

我交换了一个

f = File.open(filename, "r")
while line = f.gets
    puts line
end
f.close
Run Code Online (Sandbox Code Playgroud)

现在

FileUtils.rm_rf(dirname)
Run Code Online (Sandbox Code Playgroud)

完美无瑕

  • 如果您只是阅读完整文件,您可以执行`File.read filename`(至少在MRI中,我不认为JRuby或Rubinius支持这个),如果你想按照你的方式去做显示,最好使用块形式,因为它确保文件被关闭:`File.open(filename,"r"){| file | ...}`或`File.foreach(filename){| line | ......}` (6认同)

Jon*_*ira 5

我想删除包含所有内容的目录"不使用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)
Run Code Online (Sandbox Code Playgroud)