我正在尝试使用以下代码创建一个目录:
Dir.mkdir("/Users/Luigi/Desktop/Survey_Final/Archived/Survey/test")
unless File.exists?("/Users/Luigi/Desktop/Survey_Final/Archived/Survey/test")
Run Code Online (Sandbox Code Playgroud)
但是,我收到此错误:
没有这样的文件或目录 - /用户/路易吉/桌面/ Survey_Final /归档/调查/测试(错误:: ENOENT)
为什么Dir.mkdir上面的语句没有创建此目录?
zrl*_*3dx 241
您可能正在尝试创建嵌套目录.假设foo不存在,您将收到以下no such file or directory错误:
Dir.mkdir 'foo/bar'
# => Errno::ENOENT: No such file or directory - 'foo/bar'
Run Code Online (Sandbox Code Playgroud)
要一次创建嵌套目录,FileUtils需要:
require 'fileutils'
FileUtils.mkdir_p 'foo/bar'
# => ["foo/bar"]
Run Code Online (Sandbox Code Playgroud)
Edit2:你不必使用FileUtils,你可以做系统调用(从@mu更新是太短评论):
> system 'mkdir', '-p', 'foo/bar' # worse version: system 'mkdir -p "foo/bar"'
=> true
Run Code Online (Sandbox Code Playgroud)
但这似乎(至少在我看来)是一种更糟糕的方法,因为你使用的外部"工具"在某些系统上可能无法使用(虽然我很难想象系统没有mkdir,但谁知道).
小智 66
简单方法:
directory_name = "name"
Dir.mkdir(directory_name) unless File.exists?(directory_name)
Run Code Online (Sandbox Code Playgroud)
小智 21
另一个简单方法:
Dir.mkdir('tmp/excel') unless Dir.exist?('tmp/excel')