среда, 31 марта 2010 г.

Создание и удаление папок в Ruby

Для создания вложенных папок используем

require "fileutils"
FileUtils::mkdir_p "a/b/c"



Ранее опубликованное решение:

Источник: http://blog.inst.pp.ru/coding/creation_and_removing_dirs_in_ruby
Удаление (пробовал только в Windows)
    require 'fileutils'
    FileUtils.remove_dir('C:\FTP_Omega', force=true)


Когда встал вопрос о создании новой папки быстренько нашёл в документации к классу Dir метод mkdir, впрочем, мне это не очень помогло. Задача стояла создать директорию, но вот об уровне вложенности метод mkdir не заботится, — например, если по адресу «/home/inst/examples/newdir» не будет существовать папки «examples», то метод возвратит ошибку. Мне же требовалось создать и все вышележащие папки в случае их отсутствия. Очень повезло с тем, что нашёл в документации к калссу File метод makedirs. Он реализует как раз нужный мне в этом случае функционал. Чтобы им воспользоваться нужно подключить «ftools».


Пример использования:
require 'ftools'

File.makedirs('~/examples/newdir')

С удалением директорий почему-то мне повезло меньше. Удалить непустую директорию вроде бы невозможно. По крайней мере я не нашёл нужного метода и тогда принялся расширять функционал класса Dir. В результате моих раздумий появился метод clear!, который как раз и удаляет всё содержимое из директории, адрес которой передан ему в качестве параметра. Код метода:
class Dir
def clear!
counter = 0
map do |item|
if item != '.' && item != '..'
if File.directory?("#{path}/#{item}")
counter += Dir.new("#{path}/#{item}").clear!
Dir.rmdir "#{path}/#{item}"
else
File.unlink "#{path}/#{item}"
counter += 1
end
end
end
counter
end
end

Пользоваться очень просто, я делаю это так:
Dir.new('~/examples').clear!

Внимание! Методу всё равно какую папку очищать! Трижды проверьте свой код перед передачей параметров моему.

Замечу, что в приведённо выше примере сама директория «examples» не удалится, однако мне этого и не требовалось.

Комментариев нет:

Отправить комментарий

Ярлыки

Архив блога