Невозможно использовать File.delete для удаления файла - PullRequest
4 голосов
/ 08 февраля 2012

Система:

Windows Server 2008
Ruby 192

в 'удалить': в доступе отказано Ошибка: 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 Ответ

14 голосов
/ 08 февраля 2012

Это не закрыто.Файл закрывается только иногда в зависимости от 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])

Также дайте вашим переменным лучшие имена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...