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

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

Жанры

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

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

Геральт (сборник)

Сапковский Анджей
Фантастика:
героическая фантастика
5.00
рейтинг книги
Геральт (сборник)

Спецоперации. Лубянка и Кремль 1930–1950 годы

Судоплатов Павел Анатольевич
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Спецоперации. Лубянка и Кремль 1930–1950 годы

Я, последний. Трилогия

Нимфар / Nimfar
Фантастика:
фэнтези
попаданцы
7.30
рейтинг книги
Я, последний. Трилогия

Весь Клайв Баркер в одном томе. Компиляция

Баркер Клайв
Абсолют
Фантастика:
боевая фантастика
ужасы и мистика
5.00
рейтинг книги
Весь Клайв Баркер в одном томе. Компиляция

Капитализму в России не бывать! Выход есть!

Антонов Михаил Алексеевич
Документальная литература:
публицистика
5.00
рейтинг книги
Капитализму в России не бывать! Выход есть!

Последний рейд

Сай Ярослав
5. Медорфенов
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Последний рейд

Высоцкий

Новиков Владимир Иванович
829. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
5.20
рейтинг книги
Высоцкий

МИФЫ. Великолепный МИФ (сборник)

Асприн Роберт Линн
Мифология
Фантастика:
юмористическое фэнтези
8.76
рейтинг книги
МИФЫ. Великолепный МИФ (сборник)

Dolgin.indb

Маматов Алексей Сергеевич
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Dolgin.indb

Избранные произведения

Павлов Сергей Иванович
Фантастика:
научная фантастика
6.25
рейтинг книги
Избранные произведения

Ночная смена

Dok
Фантастика:
ужасы и мистика
5.00
рейтинг книги
Ночная смена

Собрание юмористических рассказов в одном томе

Чехов Антон Павлович
Проза:
русская классическая проза
5.00
рейтинг книги
Собрание юмористических рассказов в одном томе

Дюна

Херберт Фрэнк
Фантастика:
научная фантастика
4.38
рейтинг книги
Дюна

Семь дней Создателя

Агарков Анатолий
Фантастика:
фэнтези
5.00
рейтинг книги
Семь дней Создателя