Рубин (Errno :: EACCES) в File.delete - PullRequest
2 голосов
/ 30 июня 2011

Я пытаюсь удалить некоторые XML-файлы после того, как я закончу их использовать, и один из них выдает мне эту ошибку:

'delete': Permission denied - monthly-builds.xml (Errno::EACCES)

Ruby утверждает, что файл защищен от записи, но я установил разрешения, прежде чем пытаться удалить его.

Вот что я пытаюсь сделать:

#collect the xml files from the current directory
filenames = Dir.glob("*.xml")

#do stuff to the XML files
finalXML = process_xml_files( filenames )

#clean up directory
filenames.each do |filename|
        File.chmod(777, filename) # Full permissions
        File.delete(filename)
end

Есть идеи?

Ответы [ 3 ]

6 голосов
/ 30 июня 2011

Это:

File.chmod(777, filename)

не делает то, что вы думаете, что делает. Из тонкой инструкции :

Изменяет биты разрешений в именованных файлах на битовый массив, представленный mode_int.

Акцент мой. Файловые режимы обычно указываются в восьмеричном виде, так как они хорошо разделяют биты на три группы разрешений Unix (владелец, группа, другое):

File.chmod(0777, filename)

То есть вы на самом деле не устанавливаете файл на полный доступ, вы устанавливаете биты разрешения на 01411, который выглядит следующим образом:

-r----x--t

вместо

-rwxrwxrwx

что вы ожидаете. Обратите внимание, что ваше (десятичное) растровое изображение разрешения 777 отменило разрешение на запись.

Кроме того, удаление файла требует доступа для записи в каталог, в котором находится файл (по крайней мере, в системах Unixish), поэтому проверьте разрешения для каталога.

И, наконец, вы можете проверить возвращаемое значение из File.chmod:

[...] Возвращает количество обработанных файлов.

Тот факт, что вы звоните, не означает, что это удастся.

1 голос
/ 24 июня 2015

В моем случае это было потому, что файл, который я пытался удалить - kindle .sdr record - был каталогом, а не файлом. Мне нужно использовать это вместо:

FileUtils.rm_rf(dirname)
1 голос
/ 30 июня 2011

У вас может не быть доступа к запуску chmod.Вы должны владеть файлом, чтобы изменить его права доступа.

Файл также может быть заблокирован по причине его открытия в другом приложении.Если вы просматриваете файл, скажем, в текстовом редакторе, вы не сможете удалить его.

...