我想把一个文件存储为 /a/b/c/d.txt,但我不知道这些目录是否存在,需要在必要时递归创建它们。 如何在 Ruby 中实现?
使用mkdir_p递归创建目录
path = "/tmp/a/b/c"
FileUtils.mkdir_p(path) unless File.exists?(path)
如果您在运行Unix类机器上,则不要忘记可以通过将其放置在反引号中来在Ruby下运行Shell命令。
`mkdir -p /a/b/c`
Pathname 来拯救!
Pathname('/a/b/c/d.txt').dirname.mkpath
/a/b/c
并且创建文件 d.txt
吗? - norajPathname('/a/b/c/d.txt').dirname.mkpath
和File.write('/a/b/c/d.txt', content)
。 - Vadym Tyemirov require 'ftools'
mkdir_p
和 mkpath
的别名 https://ruby-doc.org/stdlib-2.6.5/libdoc/fileutils/rdoc/FileUtils.html#method-c-mkdir_p - noraj你也可以使用自己的逻辑
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
所以如果路径是'tmp/a/b/c',如果'tmp'不存在,则会创建'tmp',然后依次创建'tmp/a/'等。
FileUtils
和Pathname
可能是 Ruby shell 脚本编程中最重要的工具。 - Jörg W Mittag