我正在尝试使用以下代码创建目录:
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
语句创建的?
答案 0 :(得分:224)
您可能正在尝试创建嵌套目录。假设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
的系统,但谁知道)。 / p>
答案 1 :(得分:64)
简单方法:
directory_name = "name"
Dir.mkdir(directory_name) unless File.exists?(directory_name)
答案 2 :(得分:18)
另一种简单的方法:
Dir.mkdir('tmp/excel') unless Dir.exist?('tmp/excel')
答案 3 :(得分:-4)
仅Dir.mkdir('dir') rescue nil
怎么样?