Ruby删除目录

时间:2012-09-09 00:36:55

标签: ruby directory

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

  

.__ afsECFC
  .__ afs73B9

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

5 个答案:

答案 0 :(得分:88)

require 'fileutils'

FileUtils.rm_rf('directorypath/name')

这不起作用吗?

答案 1 :(得分:47)

答案 2 :(得分:10)

意识到我的错误,有些文件尚未关闭。 我之前在我的程序中使用

File.open(filename).read
我替换了

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

现在

FileUtils.rm_rf(dirname)

完美无瑕地工作

答案 3 :(得分: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)

答案 4 :(得分:0)

内置的 pathname gem 确实改善了处理路径的人体工程学,它有一个 #rmtree 方法可以实现这一点:

require "pathname"

path = Pathname.new("~/path/to/folder").expand_path
path.rmtree