我有这样的声明:
File.open(some_path, 'w+') { |f| f.write(builder.to_html)  }
哪里
some_path = "somedir/some_subdir/some-file.html"
我希望发生的是,如果没有所谓的目录somedir或some_subdir或两者的路径,我希望它自动地创建它.
我怎样才能做到这一点?
Eur*_*eka 148
您可以使用FileUtils递归创建父目录(如果它们尚不存在):
require 'fileutils'
dirname = File.dirname(some_path)
unless File.directory?(dirname)
  FileUtils.mkdir_p(dirname)
end
编辑:这是一个仅使用核心库的解决方案(重新实现轮,不推荐)
dirname = File.dirname(some_path)
tokens = dirname.split(/[\/\\]/) # don't forget the backslash for Windows! And to escape both "\" and "/"
1.upto(tokens.size) do |n|
  dir = tokens[0...n]
  Dir.mkdir(dir) unless Dir.exist?(dir)
end
And*_*aus 73
对于那些寻找创建目录的方法(如果它不存在),这是一个简单的解决方案:
require 'fileutils'
FileUtils.mkdir_p 'dir_name'
根据尤里卡的评论.
小智 19
directory_name = "name"
Dir.mkdir(directory_name) unless File.exists?(directory_name)
根据其他人的答案,什么也没发生(不起作用)。没有错误,也没有创建目录。
这是我需要做的:
require 'fileutils'
response = FileUtils.mkdir_p('dir_name')
我需要创建一个变量来捕捉FileUtils.mkdir_p('dir_name')发回的响应......然后一切都像魅力一样!
怎么用Pathname?
require 'pathname'
some_path = Pathname("somedir/some_subdir/some-file.html")
some_path.dirname.mkdir_p
some_path.write(builder.to_html)