63

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

.__afsECFC
.__afs73B9

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

4

5 回答 5

109
require 'fileutils'

FileUtils.rm_rf('directorypath/name')

这不行吗?

于 2012-09-09T01:01:16.580 回答
60

安全方法:FileUtils.remove_dir(somedir)

于 2014-07-29T04:32:17.303 回答
14

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

File.open(filename).read

我换了一个

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

现在

FileUtils.rm_rf(dirname)

完美无瑕

于 2012-09-09T03:27:28.660 回答
5

我猜想“不使用附加库”删除包含所有内容的目录的最佳方法是使用简单的递归方法:

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)
于 2016-10-31T16:49:44.600 回答
1

内置pathnamegem确实改善了使用路径的人体工程学,并且它有一种#rmtree方法可以实现这一点:

require "pathname"

path = Pathname.new("~/path/to/folder").expand_path
path.rmtree
于 2021-07-02T22:42:05.173 回答