如果 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语句没有创建这个目录?

136270 次浏览

您可能正在尝试创建嵌套目录。假设不存在 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"]

编辑2: 你不需要使用 FileUtils,你可以进行系统调用(从@mu 更新太短注释) :

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

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

简单的方法:

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

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

另一个简单的方法:

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