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

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

Жанры

Программирование на языке 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
, он интерпретируется как флаг, задающий режим вывода сообщений об ошибках.

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

Точка Бифуркации VIII

Смит Дейлор
8. ТБ
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Точка Бифуркации VIII

Глэрд VIII: Базис 2

Владимиров Денис
8. Глэрд
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Глэрд VIII: Базис 2

Воронцов. Перезагрузка. Книга 2

Тарасов Ник
2. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Воронцов. Перезагрузка. Книга 2

Чехов. Книга 2

Гоблин (MeXXanik)
2. Адвокат Чехов
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Чехов. Книга 2

Шайтан Иван 5

Тен Эдуард
5. Шайтан Иван
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
5.00
рейтинг книги
Шайтан Иван 5

Московское золото или нежная попа комсомолки. Часть Вторая

Хренов Алексей
2. Летчик Леха
Фантастика:
попаданцы
5.00
рейтинг книги
Московское золото или нежная попа комсомолки. Часть Вторая

Ищу жену с прицепом

Рам Янка
2. Спасатели
Любовные романы:
современные любовные романы
6.25
рейтинг книги
Ищу жену с прицепом

Адвокат Империи 14

Карелин Сергей Витальевич
14. Адвокат империи
Фантастика:
городское фэнтези
аниме
попаданцы
5.00
рейтинг книги
Адвокат Империи 14

Дракон - не подарок

Суббота Светлана
2. Королевская академия Драко
Фантастика:
фэнтези
6.74
рейтинг книги
Дракон - не подарок

Бальмануг. (Не) Любовница 2

Лашина Полина
4. Мир Десяти
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Бальмануг. (Не) Любовница 2

Бандит

Щепетнов Евгений Владимирович
1. Петр Синельников
Фантастика:
фэнтези
7.92
рейтинг книги
Бандит

Я еще не барон

Дрейк Сириус
1. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я еще не барон

Кодекс Охотника. Книга XV

Винокуров Юрий
15. Кодекс Охотника
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XV

Барон отрицает правила

Ренгач Евгений
13. Закон сильного
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Барон отрицает правила