我想将文件存储为/a/b/c/d.txt,但我不知道是否存在任何这些目录,并且如果需要,需要以递归方式创建它们。 怎么能用红宝石做到这一点?
答案 0 :(得分:178)
使用mkdir_p
:
FileUtils.mkdir_p '/a/b/c'
_p
是父/路径的unix保留,如果对你更有意义,你也可以使用别名mkpath
。
FileUtils.mkpath '/a/b/c'
在Ruby 1.9中,FileUtils已从核心中删除,因此您必须require 'fileutils'
。
答案 1 :(得分:18)
用户mkdir_p以递归方式创建目录
path = "/tmp/a/b/c"
FileUtils.mkdir_p(path) unless File.exists?(path)
答案 2 :(得分:6)
如果你在unixy机器上运行,不要忘记你总是可以通过将它放在反引号中来在ruby下运行shell命令。
`mkdir -p /a/b/c`
答案 3 :(得分:3)
require 'ftools'
答案 4 :(得分:0)
Pathname来营救!
Pathname('/a/b/c/d.txt').dirname.mkpath
答案 5 :(得分:-1)
您也可以使用自己的逻辑
def self.create_dir_if_not_exists(path)
recursive = path.split('/')
directory = ''
recursive.each do |sub_directory|
directory += sub_directory + '/'
Dir.mkdir(directory) unless (File.directory? directory)
end
end
因此,如果路径是&t; tmp / a / b / c' 如果' tmp'不存在' tmp'得到了创造,然后&t; tmp / a /'等等。