Ruby 复制文件并获取错误号::EACCES:权限被拒绝@io_fread

Ruby 复制文件并获取错误号::EACCES:权限被拒绝@io_fread,ruby,Ruby,我试图复制一些文件并计算哈希,但对于一些文件,我得到Errno::EACCES:权限被拒绝@io_fread 但这是真的 否则我如何检查是否可以读取文件?我不想开始。。。拯救 更新: 我正在使用Windows和Ruby 2.1.3p242 我不想使用chmod,但如果文件无法读取,就跳过它。首先,如果您描述了您正在使用的操作系统和文件系统,这将非常有用。现在,我假设您正在使用带有ext*文件系统的*NIX 检查文件的一个好方法是使用内置的Pathname类,它可以在目录和文件上工作 requir

我试图复制一些文件并计算哈希,但对于一些文件,我得到Errno::EACCES:权限被拒绝@io_fread

但这是真的

否则我如何检查是否可以读取文件?我不想开始。。。拯救

更新: 我正在使用Windows和Ruby 2.1.3p242


我不想使用chmod,但如果文件无法读取,就跳过它。

首先,如果您描述了您正在使用的操作系统和文件系统,这将非常有用。现在,我假设您正在使用带有ext*文件系统的*NIX

检查文件的一个好方法是使用内置的Pathname类,它可以在目录和文件上工作

require 'pathname'
p = Pathname.new('/mypath/myfile.rb')
p.writable?
p.readable?
我怀疑在您的情况下,可以通过在复制到目标之前在目标上设置正确的权限来解决问题:

Pathname.new(dir).chmod 755
FileUtils.cp(source, dir)

对不起,你完全正确,操作系统非常重要。我是少数几个使用WIN作为操作系统的人之一。我猜您从Digest得到的错误是权限被拒绝@rb_sysopen…Errno::EACCES。“对吗?”雷德弗雷德谢谢你的努力。但我不能重现这个错误,我不知道为什么。也许在锁定那些文件之前我打开了一些程序。如果我能再次复制错误,我会更新。不用担心,我认为你是对的。上面的代码应该可以工作,除非有其他东西锁定了文件。
require 'pathname'
p = Pathname.new('/mypath/myfile.rb')
p.writable?
p.readable?
Pathname.new(dir).chmod 755
FileUtils.cp(source, dir)