创build目录如果它不存在与Ruby

我想用下面的代码创build一个目录:

Dir.mkdir("/Users/Luigi/Desktop/Survey_Final/Archived/Survey/test") unless File.exists?("/Users/Luigi/Desktop/Survey_Final/Archived/Survey/test") 

但是,我收到此错误:

没有这样的文件或目录 – / Users / Luigi / Desktop / Survey_Final / Archived / Survey / test(Errno :: ENOENT)

为什么这个目录不是由上面的Dir.mkdir语句创build的?

您可能正尝试创build嵌套的目录。 假设foo不存在,您将不会收到no such file or directory错误:

 Dir.mkdir 'foo/bar' # => Errno::ENOENT: No such file or directory - 'foo/bar' 

要一次创build嵌套目录,需要FileUtils

 require 'fileutils' FileUtils::mkdir_p 'foo/bar' # => ["foo/bar"] 

编辑2:你不必使用FileUtils ,你可以做系统调用(从@mu更新太短评论):

 > system 'mkdir', '-p', 'foo/bar' # worse version: system 'mkdir -p "foo/bar"' => true 

但是,对于使用外部“工具”(在某些系统中可能无法使用),似乎(至less对我来说)是更糟糕的方法(虽然我几乎无法想象系统没有mkdir ,但是谁知道)。

简单的方法:

 directory_name = "name" Dir.mkdir(directory_name) unless File.exists?(directory_name) 

另一种简单的方法

Dir.mkdir('tmp/excel') unless Dir.exist?('tmp/excel')

如果Dir.mkdir('dir') rescue nil