2012-02-08 98 views
3

系统:无法使用File.delete删除文件

 
Windows Server 2008 
Ruby 192 
在 '删除'

:权限被拒绝errno的:EACCES

行:File.delete( 'FILENAME.EXT')

如果你知道任何其他方法来删除文件绕过这个错误,我很高兴分发给你一些观点:)我的意思是任何帮助,将不胜感激;-p

我怀疑那个文件没有关闭,但它关闭了。

的源代码:

Dir.foreach(FileUtils.pwd()) do |f| 
    a[i] = f 
    if a[i].end_with?('log') 
    file = File.open(a[i]) 
    if file.ctime < TIME_TO_REMOVE_LOGS || file.mtime < TIME_TO_REMOVE_LOGS || File.size(a[i]) > MAX_FILE_SIZE 
     puts a[i] 
     puts file.ctime 
     puts file.mtime 

     # zipping the file 
     orig = a[i] 
     Zlib::GzipWriter.open('arch_log.gz') do |gz| 
     gz.mtime = File.mtime(orig) 
     gz.orig_name = orig 
     gz.write IO.binread(orig) 
     end 
     file.close 
    end 
    end 
    File.delete(a[i]) 
    i = i + 1 
end 

回答

13

没有关闭。该文件有时取决于ctime而被关闭。你的代码有很多错误,但重点是:对你的文件安全并使用一个块。

File.open(a[i]) do |file| 
    # access file 
end 
# now you don't need to wonder if it's closed. 
File.delete(a[i]) 

也给你的变量更好的名字。

+2

我已经为你的正确答案+1了,但是建议如果你打算写“你的代码有很多错误”,那么你可以帮助这个新用户发布并发布你相信的内容做更好的代码。 – Phrogz 2012-02-08 15:25:49

+0

@phrogz,这可能是真的,但我不想重写他的代码。欢迎您尝试。 – pguardiario 2012-02-08 20:39:42

+7

如果您觉得代码错了,请告诉我从哪里开始改进它?或者哪些代码区域错误? – 2012-02-08 23:03:40