2012-02-08 119 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