- •Изучаемые понятия
- •Буквы и цифры
- •Пробельные символы
- •Знаки пунктуации и специальные символы
- •Операции
- •Константы
- •Целые константы
- •Константы с плавающей точкой
- •Константа-символ
- •Строковые литералы
- •Идентификаторы
- •Ключевые слова
- •Комментарии
- •Лексемы
- •Исходные тексты примеров
- •Конструкции принятия решений и циклы вопросы и ответы
- •Структура программы
- •Исходная программа
- •Объявления
- •Спецификаторы типов
- •Деклараторы
- •Деклараторы массивов, функций и указателей
- •Составные деклараторы
- •Об"явления переменной
- •Объявление простой переменной
- •Объявление перечисления
- •Объявления структур
- •Битовые поля
- •Об"явление совмещений
- •Об"явление массива
- •Об"явление функций
- •Классы памяти
- •Об"явления переменной на внешнем уровне
- •Об"явление переменной на внутреннем уровне
- •Об"явление функции на внешнем и внутреннем уровнях
- •Инициализация
- •Базовые типы и типы указателей
- •Составные типы
- •Строковые инициализаторы
- •Об"явления типов
- •Типы структур, совмещений и перечислений
- •Об"явления typedef
- •Имена типов
- •Контрольные вопросы:
- •Функции Объявление и определение функций
- •Типовые вопросы с ответами
- •Практикум Контрольные вопросы
- •Массивы
- •Сортировка массива - пример в файле list6_4cpp.
- •Поиск в массиве
- •Библиотечные функции поиска и сортировки в непрерывных массивах:
- •Строки и управление вводом/выводом
- •Форматированный потоковый вывод
- •Листинг 1. Исходный текст программы out1.Cpp
- •Функция printf
- •Функция printf
- •Листинг 3. Исходный текст программы out2.Cpp в файле List7-3.Cpp
- •Ввод строк
- •Функция getline
- •Присвоение значений строкам
- •Определение длины строки
- •Функция strlen
- •Функция strcat
- •Функция strncat
- •Сравнение строк
- •Функция strcmp
- •(См. List7_5.Cpp - Исходный текст программы string2.Cpp)
- •Поиск символов
- •Функция strchr
- •Функция strrchr
- •Основы объектно-ориентированного программирования синтаксис основных конструкций Объявление базовых классов
- •Конструкторы
- •Деструкторы
- •Объявление иерархии классов
- •Виртуальные функции
- •Дружественные функции
- •Операции и дружественные операции
- •Виртуальные функции
- •Правило виртуальной функции
- •Операции и дружественные операции
- •Исходные тексты примеров
- •Вопросы и ответы
- •Контрольные вопросы
- •Файловые операции ввода/вывода
- •Общие функции потокового ввода/вывода
- •Функция-компонент open
- •Функция-компонент close
- •Последовательный текстовый поток ввода/вывода
- •Функция-элемент getline
- •Листинг 10.1. Исходный код программы trim.Cpp
- •Последовательный двоичный файловый ввод/вывод
- •Функция-элемент write
- •Функция-элемент read
- •Листинг 10.2. Исходный код программы array.Cpp
- •Файловый ввод/вывод с прямым доступом
- •Функция-элемент seekg
- •Заключение
- •Вопросы и ответы
- •Как написать процедуру общего назначения для копирования между входным ивыходным файловым потоком?
- •Практикум Контрольные вопросы
- •Упражнение
Файловые операции ввода/вывода
Сегодняшний урок посвящен файловым операциям ввода/вывода с использованием библиотеки управления потоками C++. У вас есть две возможности: либо использовать функции файлового ввода/вывода, описанные в заголовочном файле STDIO.H, либо функции stream-библиотеки C++. Каждая из этих библиотек имеет множество мощных и удобных функций. Сегодня будут представлены основные операторы, которые позволят вам читать и записывать данные в файл. Вы изучите следующие темы:
Стандартные функции потоков ввода/вывода
Последовательный ввод/вывод потока с текстовой информацией
Последовательный ввод/вывод двоичных данных
Прямой доступ к потоку двоичных данных
Stream-библиотека C++
Stream-библиотека (известная также как библиотека iostream) выполнена в виде иерархии классов, которые описаны в нескольких заголовочных файлах. Файл IOSTREAM.H, используемый до сих пор, - это только один из них. Другой, который будет интересен в этой главе, - FSTREAM.H. Файл IOSTREAM.H поддерживает основные классы для ввода/вывода потока. Файл FSTREAM.H содержит определения для основных классов файлового ввода/вывода.
Существуют дополнительные файлы библиотеки ввода/вывода, в которых имеются более специализированные функции ввода/вывода.
Общие функции потокового ввода/вывода
В этом разделе представлены функции-элементы ввода/вывода, являющиеся общими как для последовательного, так и для прямого доступа. Эти функции включают open, close, good и fail в дополнение к операции !. Функция open открывает файловый поток для ввода, вывода, добавления, а также для ввода и вывода. Эта функция позволяет указывать тип данных, с которыми вы собираетесь работать: двоичные или текстовые.
При работе с файловым вводом/выводом очень важно знать различие между текстовым и двоичным режимами. Текстовый режим предназначен для текстовых файлов, в которых имеются строки обычного текста. Двоичный режим используется для любых других и особенно для файлов, которые сохраняются в форматах, неудобных для чтения человеком.
Существуют некоторые особые тонкости, связанные с файлами текстового режима, на которые следует обратить особое внимание и запомнить. Первая из них - символ EOF (26 в коде ASCII или Ctrl+Z) - представляет собой метку (символ) конца файла. В текстовом режиме, где встречается символ EOF, система C++ низкого уровня автоматически продвигается к концу файла; вы ничего не можете прочитать после специального символа. Это может вызвать проблемы, если такой специальный символ окажется в середине файла.
Другая особенность текстового режима заключается в том, как интерпретируются строки текстового файла. Каждая строка заканчивается последовательностью конца строки (EOL). На компьютерах PC и совместимых с ними EOL-последовательность представлена двумя символами кода ASCII: CR (13 в коде ASCII или Ctrl+M) и LF (10 в коде ASCII или Ctrl+J). Эта CRLF-последовательность используется функциями чтения и записи текстовой строки, которые автоматически, вставляют ее в файл или удаляют из него. Заметьте, что на большинстве других, систем (UNIX и Macintosh) EOF просто является символом LF.