10.1.5. Работа с двоичными файлами
10.1.5. Работа с двоичными файлами
Когда-то давно программисты на языке С включали в строку указания режима символ "b" для открытия файла как двоичного. (Вопреки распространенному заблуждению, это относилось и к ранним версиям UNIX.) Как правило, эту возможность все еще поддерживают ради совместимости, но сегодня с двоичными файлами работать не так сложно, как раньше. Строка в Ruby может содержать двоичные данные, а для чтения двоичного файла не нужно никаких специальных действий.
Исключение составляет семейство операционных систем Windows, в которых различие все еще имеет место. Основное отличие двоичных файлов от текстовых на этой платформе состоит в том, что в двоичном режиме конец строки не преобразуется в один символ перевода строки, а представляется в виде пары «возврат каретки — перевод строки». Еще одно важное отличие — интерпретация символа control-Z как конца файла в текстовом режиме:
# Создать файл (в двоичном режиме).
File.open("myfile","wb") {|f| f.syswrite("12345326789 ") }
#Обратите внимание на восьмеричное 032 (^Z).
# Читать как двоичный файл.
str = nil
File.open("myfile","rb") {|f| str = f.sysread(15) )
puts str.size # 11
# Читать как текстовый файл.
str = nil
File.open("myfile","r") {|f| str = f.sysread(15) }
puts str.size # 5
В следующем фрагменте показано, что на платформе Windows символ возврата каретки не преобразуется в двоичном режиме:
# Входной файл содержит всего одну строку: Строка 1.
file = File.open("data")
line = file.readline # "Строка 1. "
puts "#{line.size} символов." # 10 символов,
file.close
file = File.open("data","rb")
line = file.readline # "Строка 1. "
puts "#{line.size} символов." # 11 символов.
file.close
Отметим, что упомянутый в коде метод binmode переключает поток в двоичный режим. После переключения вернуться в текстовый режим невозможно.
file = File.open("data")
file.binmode
line = file.readline # "Строка 1. "
puts {line.size} символов." # 11 символов.
file.close
При необходимости выполнить низкоуровневый ввод/вывод можете воспользоваться методами sysread и syswrite. Первый принимает в качестве параметра число подлежащих чтению байтов, второй принимает строку и возвращает число записанных байтов. (Если вы начали читать из потока методом sysread, то никакие другие методы использовать не следует. Результаты могут быть непредсказуемы.)
input = File.new("infile")
output = File.new("outfile")
instr = input.sysread(10);
bytes = output.syswrite("Это тест.")
Отметим, что метод sysread возбуждает исключение EOFError при попытке вызвать его, когда достигнут конец файла (но не в том случае, когда конец файла встретился в ходе успешной операции чтения). Оба метода возбуждают исключение SystemCallError при возникновении ошибки ввода/вывода.
При работе с двоичными данными могут оказаться полезны метод pack из класса Array и метод unpack из класса String.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Работа с файлами
Работа с файлами fopenОткрывает файл и привязывает его к дескриптору.Синтаксис:int fopen(string $filename, string $mode, bool $use_include_path=false)Открывает файл с именем $filename в режиме $mode и возвращает дескриптор открытого файла. Если операция "провалилась", то функция возвращает false. Необязательный
Работа с файлами
Работа с файлами ftp_getПроизводит загрузку с FTP-сервера.Синтаксис:int ftp_get(int ftp_stream, string local_file, string remote_file, int mode)Функция ftp_get() загружает файл под названием remote_file с FTP-сервера и локально сохраняет его под именем local_file. Параметр mode устанавливает режим передачи файла и может
Работа с файлами
Работа с файлами В среде программирования UNIX существуют два основных интерфейса для файлового ввода/вывода:1. Интерфейс системных вызовов, предлагающий системные функции низкого уровня, непосредственно взаимодействующие с ядром операционной системы.2. Стандартная
14.2 Работа с файлами
14.2 Работа с файлами Начну рассказ наверно с того, что в любой момент времени работы в терминале вы находитесь в некотором каталоге. При запуске терминала текущей директорией является домашний каталог пользователя, но потом вы конечно можете её поменять.Узнать, в какой же
Работа с файлами
Работа с файлами С помощью специальной внешней объектной библиотеки VBA позволяет использовать объектно-ориентированный подход при работе с дисковыми файлами, в частности для чтения содержимого каталогов и копирования файлов. Соответствующие приемы программирования
Работа с ответными файлами csc.exe
Работа с ответными файлами csc.exe Очевидно, что при создании сложных C#-приложений из командной строки было бы очень неудобно набирать вручную все флаги и ссылки, необходимые для указания множества компоновочных блоков и входных файлов *.cs. Чтобы уменьшить объемы ручного
ПЕРЕКЛЮЧЕНИЕ И РАБОТА С ФАЙЛАМИ
ПЕРЕКЛЮЧЕНИЕ И РАБОТА С ФАЙЛАМИ Понятие ввода-вывода включает в себя функции, данные и устройства. Рассмотрим, например, нашу программу ввод-вывод4. В ней используется функция getchar( ), осуществляющая ввод, причем устройство ввода - клавиатура (в соответствии с нашим
Работа с файлами
Работа с файлами Набрав первые несколько абзацев, обязательно сохраните их. Для этого предназначена команда меню Файл ? Сохранить. В появившемся окне Сохранение документа необходимо указать имя и выбрать месторасположение файла. По умолчанию текстовый редактор
Работа с MP3-файлами
Работа с MP3-файлами Конвертируя диски в формат MP3, пользователь только первое время будет слушать композиции, сохраненные с пустыми тегами. Долгий поиск необходимой композиции вскоре начнет утомлять, ручное переименование тегов надоест после первых трех
4.2. Работа с файлами
4.2. Работа с файлами 4.2.1. Знакомство с Проводником Проводник — это файловый менеджер Windows, то есть программа, управляющая вашими файлами. Вообще-то Проводник также является оболочкой Windows, но не будем усложняться, а ограничимся лишь файловыми функциями
Работа с файлами
Работа с файлами Предположим, что мы создали какой-то документ Flash и теперь хотим сохранить его в файле. Что нужно делать в этом случае?Чтобы сохранить открытый в активном окне документ в файле документа Flash, достаточно выбрать пункт Save в меню File или нажать комбинацию
Работа с файлами
Работа с файлами Один элемент работы с файлами мы уже рассмотрели – это создание файла. Следующий важный элемент работы с файлом – это открытие файла.Действительно, создав файл и сохранив в нем информацию, мы все это сделали для того, чтобы иметь возможность продолжить
Работа с файлами изображений
Работа с файлами изображений Открытие и сохранение изображений. Принцип действия основных команд меню Файл (Создать, Открыть, Сохранить, Сохранить как) не отличается от принципа действия аналогичных команд в программе Блокнот. Подробно работа с ними описана в предыдущих
Практическая работа 14. Работа с файлами и папками
Практическая работа 14. Работа с файлами и папками Задание. Научиться создавать папки, копировать, перемещать, переименовывать и удалять файлы.Последовательность выполнения1. Откройте с помощью меню Пуск папку Документы.2. В папке Документы создайте новую папку с именем
Фултон Хэл
Просмотр ограничен
Смотрите доступные для ознакомления главы 👉