1. ホーム
  2. ruby

[解決済み] RubyのFileクラスでディレクトリを作成するには?

2022-06-06 22:43:08

質問

こんな文があります。

File.open(some_path, 'w+') { |f| f.write(builder.to_html)  }

ここで

some_path = "somedir/some_subdir/some-file.html"

というディレクトリがない場合、どうすればいいでしょうか? somedir または some_subdir のどちらか、または両方をパスに含めると、自動的に作成されるようにしたいのです。

どうすればいいのでしょうか?

どのように解決するのですか?

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