Вход/Регистрация
Программирование на языке Ruby
вернуться

Фултон Хэл

Шрифт:

• 

win32-mmap
— интерфейс к файлам, проецируемым на память, в Windows;

• 

win32-open3
— библиотека
open3
для Windows (запустить команды и получить три описателя файлов);

• 

win32-pipe
— именованные каналы в Windows;

• 

win32-process
— реализация для Windows методов
fork
,
wait
и
kill
, имеющихся в UNIX;

• 

win32-sapi
— интерфейс к Microsoft Speech API;

• 

win32-service
— интерфейс к службам Windows;

• 

win32-shortcut
— интерфейс для создания и модификации ярлыков в Windows;

• 

win32-sound
— интерфейс для воспроизведения звуковых файлов в Windows;

Вот еще несколько библиотек, которые полезно иметь под рукой:

• 

Win32::Console
— это перенос пакетов Win32::Console и Win32::Console::ANSI, первоначально написанных на языке Perl. Эта библиотека значительно упрощает работу с консолью в Windows (изменение цветов, позиционирование курсора, запрос информации и эмуляцию управляющих символов ANSI);

• 

ActiveDirectory
позволяет легко взаимодействовать с экземплярами Active Directory, работающими на серверах под управлением Microsoft Windows;

• 

ruby-inifile
позволяет работать с ini-файлами (читать, разбирать и обновлять их).

В сети есть еще много библиотек, которые могут вам пригодиться. Ищите их на сайтахи http://rubyforge.org.

14.8. Работа с файлами, каталогами и деревьями

При выполнении рутинных задач приходится много работать с файлами и каталогами, в том числе с целыми иерархиями каталогов. Немало материала на эту тему вошло в главу 4, но кое-какие важные моменты мы хотим осветить здесь.

Поскольку ввод/вывод — вещь системно-зависимая, то для различных систем приходится применять разные приемы. Если сомневаетесь, экспериментируйте!..

14.8.1. Несколько слов о текстовых фильтрах

Многие инструменты, которыми мы постоянно пользуемся (как поставляемые производителем, так и разрабатываемые собственными силами), — просто текстовые фильтры. Иными словами, они принимают на входе текст, каким-то образом преобразуют его и выводят. Классическими примерами текстовых фильтров в UNIX служат, в частности, программы

sed
и
tr
.

Иногда файл настолько мал, что целиком помещается в памяти. В этом случае возможны такие виды обработки, которые по-другому было бы сложно реализовать.

file = File.open(filename)

lines = file.readlines

# Какие-то операции...

lines.each { |x| puts x }

Бывает, что нужно обрабатывать файл построчно.

IO.foreach(filename) do |line|

 # Какие-то операции...

 puts line

end

Наконец, не забывайте, что все имена файлов, указанные в командной строке, автоматически собираются в объект

ARGF
, представляющий конкатенацию всех выходных данных (см. раздел 14.2.2). Мы можем вызывать, к примеру, метод
ARGF.readlines
, как если бы
ARGF
был объектом класса
IO
. Вся выходная информация будет, как обычно, направлена на стандартный вывод.

14.8.2. Копирование дерева каталогов (с символическими ссылками)

Пусть нужно скопировать целое дерево каталогов в новое место. Сделать это можно по-разному, но если в дереве есть символические ссылки, задача усложняется.

В листинге 14.5 приведено рекурсивное решение. Оно достаточно дружелюбно — контролирует входные данные и выводит информацию о порядке запуска.

Листинг 14.5. Копирование дерева каталогов

require "fileutils"

def recurse(src, dst)

 Dir.mkdir(dst)

 Dir.foreach(src) do |e|

# Пропустить . и ..

next if [".",".."].include? e

fullname = src + "/" + e

newname = fullname.sub(Regexp.new(Regexp.escape(src)),dst)

if FileTest:rdirectory?(fullname)

recurse(fullname,newname)

elsif FileTest::symlink?(fullname)

linkname = 'ls -l #{fullname}'.sub(/.* -> /,"").chomp

newlink = linkname.dup

n = newlink.index($oldname)

next if n == nil

n2 = n + $oldname.length - 1

newlink[n..n2] = $newname

newlink.sub!(/\/\//,"/")

# newlink = linkname.sub(Regexp.new(Regexp.escape(src)),dst)

File.symlink(newlink, newname)

  • Читать дальше
  • 1
  • ...
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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