在Ruby ENOENT错误中创建目录

时间:2016-12-10 11:20:41

标签: ruby

我是Ruby的新手。我试图以这种方式创建目录:

d = Dir.new("somedir")

但我收回了这个错误:

Errno::ENOENT: No such file or directory @ dir_initialize - somedir
from (irb):12:in `initialize'
from (irb):12:in `new'
from (irb):12
from /Users/Estimanol/.rvm/rubies/ruby-2.3.0/bin/irb:11:in `<main>'

我一直在查看其他参赛作品,他们之所以说是因为您已经在同一个目录中创建,但这不是我的理由。如果我输入

Dir.chdir ("..") 

继续告诉我同样的错误,但无论我在哪里,如果我进入

d= Dir.new(".")

它允许我创建目录。可能是因为权限? 不知道为什么,有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:4)

如果要创建目录,可以使用:

Dir.mkdir("somedir")

Dir.new尝试创建一个与名为somedir的目录相关的新Ruby对象(Dir类的实例)。如果没有此类目录,则会出现您在问题中提到的错误。 Dir.new不会尝试创建相应的目录。

如果要在彼此内部创建多个目录,可以使用:

require 'fileutils'
FileUtils.mkpath("somedir/subfolder/another_subfolder")

如果您想在必要时创建文件夹dirname后获取Dir对象:

dirname = "somedir"
Dir.mkdir(dirname) unless Dir.exist?(dirname)
dir = Dir.new(dirname)

答案 1 :(得分:2)

通常,只要计算机告诉您某些内容不存在,通常就是正确的。主要原因有三个:

  1. 真的不存在。
  2. 事情确实存在,但以其他名称存在。
  3. 事情确实存在,但不是你告诉电脑寻找的地方。
  4. 在这种特殊情况下,您要求计算机在当前工作目录中打开名为somedir的目录。

    因此,为了调试您的问题,您应该确保:

    1. 目录somedir 确实存在
    2. 目录是真的名为somedir,而不是其他东西(可能你错误​​输入了它的名字,也许它有一个文件管理器默认隐藏的文件扩展名,也许它的名字中有不可打印的字符)。另外,请确保它是目录而不是常规文件。
    3. 目录确实位于程序的当前工作目录中。 (特别是,一个常见的错误错误是当前的工作目录不是你想象的那样;记住启动时当前的工作目录完全由用户控制,程序无法控制它!)

答案 2 :(得分:0)

为了创建目录,您可以使用FileUtils模块。

首次使用

require 'fileutils'

将模块的功能添加到您的程序中。

然后你可以使用

FileUtils.mkdir('directory_name')

您甚至可以使用

递归创建目录
FileUtils.mkdir_p('parent_directory/child_directory')

其中parent_directory不需要存在,因为#mkdir_p的作用类似mkdir -p,并在需要时创建整个结构。