如果Ruby不存在则创建目录

时间:2013-10-09 18:57:16

标签: ruby

我正在尝试使用以下代码创建目录:

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语句创建的?

4 个答案:

答案 0 :(得分:224)

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

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

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

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

Edit2:您不必使用FileUtils,您可以进行系统调用(从@mu更新的评论太短):

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

但这似乎(至少对我来说)更糟糕,因为你使用的外部“工具”可能在某些系统上无法使用(虽然我很难想象没有mkdir的系统,但谁知道)。 / p>

答案 1 :(得分:64)

简单方法:

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

答案 2 :(得分:18)

另一种简单的方法:

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

答案 3 :(得分:-4)

Dir.mkdir('dir') rescue nil怎么样?