我是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(".")
它允许我创建目录。可能是因为权限? 不知道为什么,有人可以帮帮我吗?
答案 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)
通常,只要计算机告诉您某些内容不存在,通常就是正确的。主要原因有三个:
在这种特殊情况下,您要求计算机在当前工作目录中打开名为somedir
的目录。
因此,为了调试您的问题,您应该确保:
somedir
确实存在。somedir
,而不是其他东西(可能你错误输入了它的名字,也许它有一个文件管理器默认隐藏的文件扩展名,也许它的名字中有不可打印的字符)。另外,请确保它是目录而不是常规文件。答案 2 :(得分:0)
为了创建目录,您可以使用FileUtils模块。
首次使用
require 'fileutils'
将模块的功能添加到您的程序中。
然后你可以使用
FileUtils.mkdir('directory_name')
您甚至可以使用
递归创建目录FileUtils.mkdir_p('parent_directory/child_directory')
其中parent_directory
不需要存在,因为#mkdir_p
的作用类似mkdir -p
,并在需要时创建整个结构。