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