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

10.1.18. Класс Pathname

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 или в любом другом справочном руководстве.

Оглавление книги

Оглавление статьи/книги

Генерация: 0.701. Запросов К БД/Cache: 2 / 0
поделиться
Вверх Вниз