我尝试在使用完毕后删除一些XML文件,其中一个文件给我这个错误:
'delete': Permission denied - monthly-builds.xml (Errno::EACCES)
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
有什么想法吗?
答案 0 :(得分:6)
此:
File.chmod(777, filename)
不符合您的想法。来自fine manual:
将指定文件上的权限位更改为
mode_int
所代表的位模式。
强调我的。文件模式通常以八进制指定,因为它可以很好地将这些位分成三个Unix权限组(所有者,组,其他):
File.chmod(0777, filename)
因此,您实际上并未将文件设置为完全访问权限,而是将权限位设置为01411,如下所示:
-r----x--t
而不是
-rwxrwxrwx
你期待的。请注意,您的(十进制)777权限位图已删除了写入权限。
此外,删除文件需要对文件所在目录的写访问权限(至少在Unixish系统上),因此请检查目录的权限。
最后,您可能想要检查File.chmod
的返回值:
[...]返回已处理的文件数。
仅仅因为你打电话并不意味着它会成功。
答案 1 :(得分:1)
您可能无权运行chmod
。您必须拥有该文件才能更改其权限。
该文件也可能因在另一个应用程序中打开而被锁定。如果您正在文本编辑器中查看文件,则可能无法将其删除。
答案 2 :(得分:1)
在我的情况下,这是因为我试图删除的文件 - kindle .sdr
记录 - 是目录,而不是文件。我需要改用它:
FileUtils.rm_rf(dirname)