Как получить разрешение на переименование файла для моей программы Ruby? - PullRequest
1 голос
/ 04 августа 2011

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

Каксогласно комментариям и документации здесь , я использую следующую строку кода:

 File.rename(File.basename(modRaw), File.basename(modRaw)+'.bak')

Однако, когда я делаю это, я получаю следующую ошибку во время выполнения:

enter image description here

Затем программа прерывается.(leatherReplacer.rb - это название моей программы, а строка 88 - это строка кода выше)

Как разрешить моей программе переименовывать файлы, необходимые для успешной работы?

Ответы [ 5 ]

2 голосов
/ 05 августа 2011

Windows имеет некоторые специальные правила, касающиеся разрешений. Здесь важно то, что ОС не позволяет перемещать или переименовывать файл, пока файл открыт.

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

1 голос
/ 04 августа 2011

Вы, вероятно, не хотите звонить туда File.basename, который удаляет каталог:

Возвращает последний компонент имени файла, указанный в * file_name*, который должен быть сформирован с использованием прямой косой черты ("/") независимо от разделителя, используемого в локальной файловой системе.

Итак, если modRaw равно /where/is/pancakes.house, то вы говорите:

File.rename('pancakes.house', 'pancakes.house.bak')

Но pancakes.house, вероятно, отсутствует в текущем каталоге скрипта.Попробуйте без File.basename звонков:

File.rename(modRaw, modRaw + '.bak')
1 голос
/ 04 августа 2011

Если вы являетесь владельцем этого файла, используйте File.chmod , чтобы установить необходимые разрешения .

0 голосов
/ 14 октября 2013

попробуйте использовать полный путь к файлу e.t File.rename ('c: \ pancakes.house', 'c: \ pancakes.house.bak')

в win7 я сталкиваюсь с той же проблемой

0 голосов
/ 04 августа 2011

Я не очень разбираюсь в ruby, но не могли бы вы запустить его из командной строки / bash с правами администратора, такими как «запуск от имени администратора» или «su root»?

Согласно Objectmix и ruby-forum , вы должны установить его на 755 или + x, а затем, возможно, на свое усмотрение.

...