2014-09-18 2 views
1

Я использую Ruby 2.0 на Windows 8.Нет разрешения на удаление файлов в Windows?

Моя программа существует для очистки дома: она сканирует папку журнала для файлов определенного типа, содержащую подстроку certian, до определенной даты и удаляет они используют File.delete, если они определены как бесполезные для меня.

Проблема возникает из-за того, что я всегда получаю ошибку Permission denied, , даже если я запустил программу Ruby из командной строки с повышенными значениями. У меня проблема Googled, и все говорят просто поднять командную строку, но я утра, и это ничего не меняет. Какие ошибки я пропустил?

Dir.glob('C:/Users/sarah_000/AppData/Roaming/ScanLog/*.log') do |f| 
    file = File.open(f) 
    if file.read[0..29].include? "success" and file.mtime < Time.new(2014,9,1) then 
    File.delete(file) 
    end 
end 
+0

Убедитесь, что вы являетесь администратором или имеете права чтения и записи на этот файл. – Schylar

+0

http://superuser.com/questions/204909/cant-delete-folder-and-i-am-admin-you-need-permission -to-perform-this-action Вы проверяете это, это вам поможет? – mybirthname

ответ

0

Другой процесс может иметь открытую ручку для файла, который вы пытаетесь удалить. Попробуйте создать дополнительный, фиктивный файл в том же каталоге и посмотреть, можете ли вы его удалить. Попробуйте завершить любые программы, которые могут открыть файл.

На самом деле я только что заметил, что ваша программа Ruby открыла файл. Попробуйте закрыть файл с помощью .close перед удалением.

+0

Закрытие файла перед его удалением решило проблему, спасибо за совет! – GreenTriangle

+0

В общем, вы должны как можно скорее закрыть закрытие дескрипторов файлов, и Ruby имеет несколько способов сделать это. В этом случае что-то вроде 'first_part = File.open (f) {| fi | fi.read (30)} ', вероятно, будет работать хорошо. –

Смежные вопросы