File.delete上的Ruby(Errno :: EACCES)

Hun*_*len 2 ruby permissions chmod

我试图删除一些XML文件后,我使用它们之一,其中一个给我这个错误:

'delete': Permission denied - monthly-builds.xml (Errno::EACCES)
Run Code Online (Sandbox Code Playgroud)

Ruby声称该文件是写保护的,但我在尝试删除它之前设置了权限.

这就是我想要做的:

#collect the xml files from the current directory
filenames = Dir.glob("*.xml")

#do stuff to the XML files
finalXML = process_xml_files( filenames )

#clean up directory
filenames.each do |filename|
        File.chmod(777, filename) # Full permissions
        File.delete(filename)
end
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

mu *_*ort 6

这个:

File.chmod(777, filename)
Run Code Online (Sandbox Code Playgroud)

不会做你认为它做的事情.从精细手册:

将命名文件上的权限位更改为由表示的位模式mode_int.

强调我的.文件模式通常以八进制指定,因为它可以很好地将这些位分成三个Unix权限组(所有者,组,其他):

File.chmod(0777, filename)
Run Code Online (Sandbox Code Playgroud)

所以你实际上并没有将文件设置为完全访问权限,你将权限位设置为01411,如下所示:

-r----x--t
Run Code Online (Sandbox Code Playgroud)

而不是

-rwxrwxrwx
Run Code Online (Sandbox Code Playgroud)

那是你期待的.请注意,您的(十进制)777权限位图已删除了写入权限.

此外,删除文件需要对文件所在目录的写访问权限(至少在Unixish系统上),因此请检查目录的权限.

最后,您可能想要检查以下内容的返回值File.chmod:

[...]返回处理的文件数.

仅仅因为你打电话并不意味着它会成功.