我收到以下错误:
"Errno::ENOENT: No such file or directory"
当我尝试将文件下载到不存在的目录时。
例如:
ftp = Net::FTP.new('example.com')
ftp.login
files = ftp.chdir('pub/lang/ruby/contrib')
files = ftp.list('n*')
ftp.getbinaryfile('nif.rb-0.91.gz', 'pub/lang/ruby/contrib/nif.gz', 1024)
ftp.close
但是,对于我要下载的许多文件,完整的目录路径将不存在。例如,在第一个文件创建 pub 之前,它不会存在,这也适用于 lang/ruby/contrib。
有没有一种方法可以检查目录是否存在,如果不存在则创建它们?我知道存在?,但是它会查找参考文件,并且不会创建完整路径。我想我需要一些递归方法来遍历文件夹结构,直到找到文件名。
编辑: mkdir_p 似乎正是我需要的解决方案。
但是,当我使用“/a/b/c”路径时,我注意到
FileUtils.mkdir_p(File.dirname(localdir))
返回错误: Errno::EACCES: 权限被拒绝 - /a
如果我手动删除前面的“/”,它就可以了。是什么原因造成的?解决该错误的最佳解决方案是什么?我应该只使用以下内容吗?
path="/a/b/c"
if path[0]="/"
path=path[1..-1]
end
然而,我觉得这只是一个黑客。
您无法保存到不存在的路径。作为开发人员,您有责任在尝试保存文件之前确保目标路径存在。
Ruby 有一些方法可以让你检查文件或目录是否存在:
- File.exist?('路径/到/文件') http://www.ruby-doc.org/core-2.0/File.html#method-c-exist-3F
- File.file?('路径/到/文件') http://www.ruby-doc.org/core-2.0/File.html#method-c-file-3F
- 文件.目录?('路径/到/文件') http://www.ruby-doc.org/core-2.0/File.html#method-c-directory-3F
- Dir.directory?('path/to/dir') http://www.ruby-doc.org/core-2.0/Dir.html#method-c-exist-3F
- Dir.mkdir('路径/到/目录') http://www.ruby-doc.org/core-2.0/Dir.html#method-c-mkdir
- FileUtils.makedirs('路径/到/目录') http://ruby-doc.org/stdlib-1.9.3/libdoc/fileutils/rdoc/FileUtils.html#method-c-makedirs
FileUtils.makedirs()
是一个别名mkpath
, and mkdir_p
。我更喜欢makedirs
因为它是助记符。
这些也很有用:
- Dir.chdir('路径/到/目录') http://ruby-doc.org/core-2.0/Dir.html#method-c-chdir
- FileUtils.chdir('路径/到/目录') http://ruby-doc.org/stdlib-2.0/libdoc/fileutils/rdoc/FileUtils.html#method-c-chdir
在这两者之间我更喜欢Dir.chdir
,因为它需要一个块。该块内发生的任何操作都发生在您更改为的目录中。退出时,目录恢复到之前的状态。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)