Чтение онлайн

на главную - закладки

Жанры

Программирование на языке Ruby
Шрифт:

Метод класса

join
использует этот разделитель для составления полного путевого имени из переданного списка компонентов:

path = File.join("usr","local","bin","someprog")

# path равно "usr/local/bin/someprog".

# Обратите внимание, что в начало имени разделитель не добавляется!

Не думайте, что методы

File.join
и
File.split
взаимно обратны, — это не так.

10.1.18. Класс Pathname

Следует знать о существовании стандартной библиотеки

pathname
, которая предоставляет класс
Pathname
. В сущности, это обертка вокруг классов
Dir
,
File
,
FileTest
и
FileUtils
, поэтому он комбинирует многие их функции логичным и интуитивно понятным способом.

path = Pathname.new("/home/hal")

file = Pathname.new("file.txt")

p2 = path + file

path.directory? # true

path.file? # false

p2.directory? # false

p2.file? # true

parts = path2.split # [Путевое имя:/home/hal, Путевое имя:file.txt]

ext = path2.extname # .txt

Как и следовало ожидать, имеется ряд вспомогательных методов. Метод

root?
пытается выяснить, относится ли данный путь к корневому каталогу, но его можно «обмануть», так как он просто анализирует строку, не обращаясь к файловой системе. Метод
parent?
возвращает путевое имя родительского каталога данного пути. Метод
children
возвращает непосредственных потомков каталога, заданного своим путевым именем; в их число включаются как файлы, так и каталоги, но рекурсивного спуска не производится.

p1 = Pathname.new("//") # Странно, но допустимо.

p1.root? # true

р2 = Pathname.new("/home/poole")

p3 = p2.parent # Путевое имя:/home

items = p2.children # Массив объектов Pathname

# (все файлы и каталоги, являющиеся

# непосредственными потомками р2).

Как и следовало ожидать, методы

relative
и
absolute
пытаются определить, является ли путь относительным или абсолютным (проверяя, есть ли в начале имени косая черта):

p1 = Pathname.new("/home/dave")

p1.absolute? # true

p1.relative? # false

Многие методы, например

size
,
unlink
и пр., просто делегируют работу классам
File
,
FileTest
и
FileUtils
; повторно функциональность не реализуется.

Дополнительную информацию о классе

Pathname
вы найдете на сайте ruby-doc.org или в любом другом справочном руководстве.

10.1.19. Манипулирование файлами на уровне команд

Часто приходится манипулировать файлами так, как это делается с помощью командной строки: копировать, удалять, переименовывать и т.д.

Многие из этих операций реализованы встроенными методами, некоторые находятся в модуле

FileUtils
из библиотеки
fileutils
. Имейте в виду, что раньше функциональность модуля
FileUtils
подмешивалась прямо в класс
File
; теперь эти методы помещены в отдельный модуль.

Для удаления файла служит метод

File.delete
или его синоним
File.unlink
:

File.delete("history")

File.unlink("toast")

Переименовать файл позволяет метод

File.rename
:

File.rename("Ceylon","SriLanka")

Создать ссылку на файл (физическую или символическую) позволяют методы

File.link
и
File.symlink
соответственно:

File.link("/etc/hosts","/etc/hostfile") # Физическая ссылка.

File.symlink("/etc/hosts","/tmp/hosts") # Символическая ссылка.

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

truncate
:

File.truncate("myfile",1000) # Теперь не более 1000 байтов.

Два файла можно сравнить с помощью метода

compare_file
. У него есть синонимы
cmp
и
compare_stream
:

require "fileutils"

same = FileUtils.compare_file("alpha","beta") # true

Метод

copy
копирует файл в другое место, возможно, с переименованием. У него есть необязательный флаг, говорящий, что сообщения об ошибках нужно направлять на стандартный вывод для ошибок. Синоним — привычное для программистов UNIX имя
cp
.

require "fileutils"

# Скопировать файл epsilon в theta с протоколированием ошибок.

FileUtils.сору("epsilon","theta", true)

Файл можно перемещать методом

move
(синоним
mv
). Как и
сору
, этот метод имеет необязательный параметр, включающий вывод сообщений об ошибках.

require "fileutils"

FileUtils.move( "/trap/names", "/etc") # Переместить в другой каталог.

FileUtils.move("colours","colors") # Просто переименовать.

Метод

safe_unlink
удаляет один или несколько файлов, предварительно пытаясь сделать их доступными для записи, чтобы избежать ошибок. Если последний параметр равен
true
или
false
, он интерпретируется как флаг, задающий режим вывода сообщений об ошибках.

Поделиться:
Популярные книги

Масоны

Писемский Алексей Феофилактович
Проза:
русская классическая проза
6.25
рейтинг книги
Масоны

Океан сказаний (сборник)

Сомадева
Библиотека всемирной литературы
Старинная литература:
древневосточная литература
6.25
рейтинг книги
Океан сказаний (сборник)

Россия молодая

Герман Юрий Павлович
Полное издание в одном томе
Проза:
историческая проза
6.57
рейтинг книги
Россия молодая

Паралогии

Липовецкий Марк Наумович
Научная библиотека
Научно-образовательная:
культурология
5.00
рейтинг книги
Паралогии

Заговор «Аквитания»

Ладлэм Роберт
Детективы:
политические детективы
5.00
рейтинг книги
Заговор «Аквитания»

1941: Время кровавых псов

Золотько Александр Карлович
1. Всеволод Залесский
Приключения:
исторические приключения
6.36
рейтинг книги
1941: Время кровавых псов

Младший сын

Балашов Дмитрий Михайлович
1. Государи московские
Научно-образовательная:
история
8.50
рейтинг книги
Младший сын

Лестница бога. Пенталогия

Киселев Юрий Львович
Вселенная EVE Online
Фантастика:
фэнтези
боевая фантастика
6.67
рейтинг книги
Лестница бога. Пенталогия

Обрыв

Гончаров Иван Александрович
Гончаров И. А. Романы
Проза:
русская классическая проза
5.00
рейтинг книги
Обрыв

Из Багдада в Стамбул

Май Карл Фридрих
Приключения:
прочие приключения
6.80
рейтинг книги
Из Багдада в Стамбул

Далекая страна. Тетралогия

Кош Алекс
Ремесло
Фантастика:
фэнтези
9.10
рейтинг книги
Далекая страна. Тетралогия

Рыцарь Империи

Буревой Андрей
3. Одержимый
Фантастика:
фэнтези
9.39
рейтинг книги
Рыцарь Империи

Бастард

Осадчук Алексей Витальевич
1. Последняя жизнь
Фантастика:
фэнтези
героическая фантастика
попаданцы
5.86
рейтинг книги
Бастард

Отряд

Посняков Андрей
Отряд тайных дел
Фантастика:
фэнтези
боевая фантастика
6.25
рейтинг книги
Отряд