Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Дополнительную информацию о классе
Pathname
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
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
require "fileutils"
FileUtils.safe_unlink("alpha","beta","gamma")
# Протоколировать ошибки при удалении следующих двух файлов:
FileUtils.safe_unlink("delta","epsilon",true)
Наконец, метод
install
syscopy
require "fileutils"
FileUtils.install("foo.so","/usr/lib")
# Существующий файл foo.so не будет переписан,
# если он не отличается от нового.
Дополнительную информацию о модуле
FileUtils
10.1.20. Ввод символов с клавиатуры
В данном случае мы имеем в виду небуферизованный ввод, когда символ обрабатывается сразу после нажатия клавиши, не дожидаясь, пока будет введена вся строка.
Это можно сделать и в UNIX, и в Windows, но, к сожалению, совершенно по-разному.
Версия для UNIX прямолинейна. Мы переводим терминал в режим прямого ввода (raw mode) и обычно одновременно отключаем эхо-контроль.
def getchar
system("stty raw -echo") # Прямой ввод без эхо-контроля.
char = STDIN.getc
system("stty -raw echo") # Восстановить режим терминала.
char
end
На платформе Windows придется написать расширение на С. Пока что альтернативой является использование одной из функций в библиотеке
Win32API
require 'Win32API'
def getchar
char = Win32API.new("crtdll", "_getch", [], 'L').Call
end
Поведение в обоих случаях идентично.
10.1.21. Чтение всего файла в память
Чтобы прочитать весь файл в массив, не нужно даже его предварительно открывать. Все сделает метод
IO.readlines
arr = IO.readlines("myfile")
lines = arr.size
puts "myfile содержит #{lines} строк."
longest = arr.collect {|x| x.length}.max
puts "Самая длинная строка содержит #{longest} символов."
Можно также воспользоваться методом
IO.read