Я хочу сохранить файл как /a/b/c/d.txt, но я не знаю, существует ли какой-либо из этих каталогов, и мне нужно рекурсивно создавать их при необходимости. Как это сделать в рубине?
Ответы:
Если вы работаете на unixy-машинах, не забывайте, что вы всегда можете запустить команду оболочки под ruby, поместив ее в обратные кавычки.
`mkdir -p /a/b/c`
Путь на помощь!
Pathname('/a/b/c/d.txt').dirname.mkpath
FileUtils.mkdir_p '/a/b/c'
+ создавать d.txt
одновременно?
Pathname('/a/b/c/d.txt').dirname.mkpath
и File.write('/a/b/c/d.txt', content)
без filename = '/a/b/c/d.txt'.rpartition('/').last
и остальной парсинг,
Вы также можете использовать свою собственную логику
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.