无法使用File.delete删除文件

Jac*_*han 4 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
Run Code Online (Sandbox Code Playgroud)

pgu*_*rio 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])
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您觉得代码有问题,请告诉我从哪里开始改进?或者代码的哪些区域是错误的? (7认同)
  • 我的建议是修复我提到的内容,然后发布一个新问题"以下代码有什么问题"或者更好的方法是将其提交给codereview.stackexchange.com (3认同)
  • 我已经为你找到了正确的答案给你+1了,但是如果你打算写一个_"你的代码有很多问题"_那你帮助这个新用户并发布你认为更好的代码. (2认同)