无法使用File.delete删除文件

时间:2012-02-08 05:34:37

标签: ruby batch-file

系统:

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

1 个答案:

答案 0 :(得分:14)

它没有关闭。该文件有时会根据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])

同时为您的变量提供更好的名称。