小编典典

如果 Ruby 不存在目录,则创建目录

all

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

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为什么上面的语句没有创建这个目录?


阅读 54

收藏
2022-08-21

共1个答案

小编典典

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

2022-08-21