Я хочу сохранить файл как /a/b/c/d.txt, но я не знаю, существует ли какой-либо из этих каталогов и нужно рекурсивно создавать их, если это необходимо. Как можно сделать это в рубине?
Как создать каталоги рекурсивно в рубине?
Ответ 1
Используйте mkdir_p
:
FileUtils.mkdir_p '/a/b/c'
_p
- это фиксация unix для parent/path, вы также можете использовать псевдоним mkpath
, если это имеет для вас больше смысла.
FileUtils.mkpath '/a/b/c'
В Ruby 1.9 FileUtils был удален из ядра, поэтому вам нужно require 'fileutils'
.
Ответ 2
Используйте mkdir_p для рекурсивного создания каталога
path = "/tmp/a/b/c"
FileUtils.mkdir_p(path) unless File.exists?(path)
Ответ 3
Если вы работаете на unixy-машинах, не забывайте, что вы всегда можете запустить команду оболочки под ruby, поместив ее в обратные ссылки.
`mkdir -p /a/b/c`
Ответ 4
require 'ftools'
Ответ 5
Путь на помощь!
Pathname('/a/b/c/d.txt').dirname.mkpath
Ответ 6
Вы также можете использовать свою собственную логику
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/" и т.д. и т.д.