
- •1.1.Указатели
- •1.1.1.Объявление указателей и работа с адресами
- •1.1.2.Адресная арифметика
- •1.1.3.Указатели как формальные параметры функции
- •1.1.4.Связь указателей и массивов
- •1.1.5.Константные указатели и указатели на константы
- •1.1.6.Связь указателей и строк
- •1.1.7.Преобразование указателей
- •1.1.8.Бестиповые указатели
- •1.1.9.Массив указателей
- •1.1.10.Указатели на указатели
- •1.1.11.Резервирование и освобождение памяти (операторы new и delete)
- •1.2.Типы данных, определяемые пользователем
- •1.2.1.Переопределяемые типы данных
- •1.2.2.Структуры
- •1.2.2.1.Массивы структур
- •1.2.2.2.Использование указателей на структуры
- •1.2.2.4.Динамические структуры и массивы структур
- •1.2.3.Классы
- •1.2.3.1.Введение в ооп
- •2.1.Потоки
- •2.2.Стандартные потоки
- •2.4.Файловые потоки
- •2.4.1.Общие принципы работы с файлами
- •2.4.2.Режимы открытия файлов
- •2.4.3.Текстовые и бинарные файлы и файловые потоки
- •2.4.4.Проверка состояния файла и потока
- •2.4.5.Функции (методы) ввода-вывода
- •2.4.5.1.Методы get и put
- •2.4.5.2.Метод getline
- •2.4.5.3.Методы read и write
- •2.4.6.Особенности работы с бинарными файлами
- •2.4.7.Использование текущей позиции файла
2.4.5.3.Методы read и write
Для ввода-вывода нескольких байтов данных определены также методы read и write:
istream& read (char* buf, int nCount);
ostream& write (const char* buf, int nCount);
Метод read вводит указанное в nCount количество байтов (символов) в память, начиная с адреса buf. Метод write выводит указанное в nCount количество байтов (символов), расположенных в памяти, начиная с адреса buf.
2.4.6.Особенности работы с бинарными файлами
Бинарные файлы, в отличие от текстовых, могут хранить числовые данные в их внутреннем, числовом формате. Для ввода данных из бинарного файла может использоваться метод read, для вывода в бинарный файл – метод write.
Если вводимые или выводимые данные не являются символами или строками, например, это числа, структуры или объекты, необходимо выполнять преобразование адресов данных, передаваемых методам read и write, к типу char*. В этом случае данные, начиная с указанного адреса, будут рассматриваться как коды символов и произойдет их побайтовый ввод (вывод) без какого-либо промежуточного преобразования. В качестве числа вводимых (выводимых) байтов следует указывать размер переменной соответствующего типа (например, 2 – для переменных типа short, 4 – для переменных типа long, размер, вычисленный с помощью операции sizeof, – для массивов, структур и объектов).
Для бинарного вывода файл должен быть открыт с режимом ios::binary, поскольку в противном случае каждый байт потока со значением 10 (шестнадцатеричным 0A) в файле будет заменен парой байтов со значениями 13 и 10 (шестнадцатеричными 0D и 0A).
2.4.7.Использование текущей позиции файла
Для изменения текущей позиции во входном файле, используется метод seekg. Его основная форма имеет два параметра. Первый из них – целое число, задающее смещение позиции в байтах, второй параметр определяет точку отсчета смещения, он может принимать одно из трех значений:
ios::beg – начало файла;
ios::cur – текущая позиция;
ios::end – конец файла.
Есть еще один вариант seekg – с одним параметром, задающим смещение позиции. Он подразумевает смещение от начала файла.
Для перемещения текущей позиции в выходном файле, используется метод seekp, также с двумя или одним параметром. Смысл его параметров тот же, что и у параметров метода seekg.
После перемещения текущей позиции операции ввода-вывода продолжаются с нового места в файле.
Текущую позицию данных можно определить при помощи метода tellg при вводе и tellp – при выводе. Эти методы не имеют параметров и возвращают текущую позицию связанного с потоком файла. Использование этих методов позволяет сохранить текущее значение позиции файла, выполнить некоторые операции ввода-вывода, а затем восстановить прежнее значение:
long p = io.tellg();
...
io.seekg (p);
Следует отметить, что некоторые операции объектно-ориентированного ввода-вывода файлов имеют специфику, зависящую от конкретной операционной системы и компилятора, поэтому за деталями реализации полезно обращаться к технической документации (например, к справочной системе) используемой среды разработки программ.