Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
__END__Отметим, что наличие директивы
__END__DATA10.1.27. Работа с временными файлами
Во многих случаях необходимо работать с файлами, которые по сути своей анонимны. Мы не хотим возиться с присваиванием им имен и проверять, что при этом не возникает конфликтов с существующими файлами. И помнить о том, что такие файлы нужно удалять, тоже не хочется.
Все эти проблемы решает библиотека
Tempfilenewopentmpdirtmptemp"/tmp"Возвращаемый объект
IOУ метода
closetruepathrequire "tempfile"temp = Tempfile.new("stuff")name = temp.path # "/tmp/stuff17060.0"temp.puts "Здесь был Вася"temp.close# Позже...temp.openstr = temp.gets # "Здесь был Вася"temp.close(true) # Удалить СЕЙЧАС.10.1.28. Получение и изменение текущего каталога
Получить имя текущего каталога можно с помощью метода
Dir.pwdDir.getwdДля изменения текущего каталога служит метод
Dir.chdirDir.chdir("/var/tmp")puts Dir.pwd # "/var/tmp"puts Dir.getwd # "/var/tmp"Этот метод также принимает блок в качестве параметра. Если блок задан, то текущий каталог изменяется только на время выполнения блока, а потом восстанавливается первоначальное значение:
Dir.chdir("/home")Dir.chdir("/tmp") do puts Dir.pwd # /tmp # Какой-то код...endputs Dir.pwd # /home10.1.29. Изменение текущего корня
В большинстве систем UNIX можно изменить «представление» процесса о том, что такое корневой каталог
/chrootDir.chdir("/home/guy/sandbox/tmp")Dir.chroot("/home/guy/sandbox")puts Dir.pwd # "/tmp"10.1.30. Обход каталога
Метод класса
foreacheachDir.foreach("/tmp") { |entry| puts entry }dir = Dir.new("/tmp")dir.each { |entry| puts entry }Оба фрагмента печатают одно и то же (имена всех файлов и подкаталогов в каталоге /tmp).
10.1.31. Получение содержимого каталога
Метод класса
Dir.entrieslist = Dir.entries("/tmp") # %w[. .. alpha.txt beta.doc]Как видите, включаются и элементы, соответствующие текущему и родительскому каталогу. Если они вам не нужны, придется отфильтровать их вручную.
10.1.32. Создание цепочки каталогов
Иногда необходимо создать глубоко вложенный каталог, причем промежуточные каталоги могут и не существовать. В UNIX мы воспользовались бы для этого командой
mkdir -pВ программе на Ruby такую операцию выполняет метод
FileUtils.makedirsfileutilsrequire "fileutils"FileUtils.makedirs("/tmp/these/dirs/need/not/exist")10.1.33. Рекурсивное удаление каталога
В UNIX команда
rm -rf dirdirВ последних версиях Ruby в класс
PathnamermtreeFileUtilsrm_rrequire 'pathname'dir = Pathname.new("/home/poole/")dir.rmtree# или:require 'fileutils'FileUtils.rm_r("/home/poole")
