173

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

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

4 回答 4

287

您可能正在尝试创建嵌套目录。假设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,但谁知道)。

于 2013-10-09T19:08:23.857 回答
82

简单的方法:

directory_name = "name"
Dir.mkdir(directory_name) unless File.exists?(directory_name)
于 2015-03-03T07:35:08.477 回答
31

另一种简单的方法:

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

于 2017-04-22T08:54:15.230 回答
-6

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

于 2017-01-07T09:47:05.887 回答