ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Ввод/вывод данных с помощью функций унаследованных от С
Поток в C++ - последовательность байтов, независимых от конкретного устройства, с которого производится считывание данных.
Открытие потока
Работа с потоком начинается с его открытия. Поток можно открыть для чтения и/или записи в двоичном или текстовом режиме. Функция открытия потока имеет формат:
FILE* fopen(const char* filename, const char* mode); FILE – специальный тип данных, содержащий информацию необходимую для выполнения операций с файлом. Первый параметр — имя открываемого файла в виде строки, второй — режим открытия файла: "г" — файл открывается для чтения; "w" — открывается пустой файл для записи (если файл существует, он стирается); "а" — файл открывается для добавления информации в его конец; "г+" — файл открывается для чтения и записи (файл должен существовать); "W+ " — открывается пустой файл для чтения и записи (если файл существует, он стирается); "а+" — файл открывается для чтения и добавления информации в его конец.
Режим открытия может также содержать символы t (текстовый режим) или b (двоичный режим), отличающиеся обработкой символов перехода на новую строку. По умолчанию файл открывается в текстовом режиме. Текстовый файл трактуется в С++ как совокупность символьных строк переменной длины. Доступ к каждой строке возможен лишь последовательно, начиная с первой. При создании текстовых файлов в конце каждой строки ставится специальный признак EOL (кодируется последовательностью кодов 13 и 10), а в конце всего файла – признак конца файла (код 26). В двоичном режиме эти преобразования не выполняются.
Пример: FILE * f = fopen("d:\\cpp\\clata". "rb+"); Имя функции является указателем на ее расположение в памяти, поэтому знак равенства допустим. Присваивание указателю адреса функции fopen необходимо для того, чтобы ее можно было использовать в других функциях (методах). Указатель f используется в дальнейших операциях с потоком. Его передают функциям ввода/вывода в качестве параметра. При открытии потока с ним связывается область памяти, называемая буфером. Это делается для увеличения скорости передачи данных. При выводе вся информация направляется в буфер и накапливается там до заполнения буфера или до закрытия потока. Чтение осуществляется блоками, равными размеру буфера, и данные читаются из буфера. Следует иметь в виду, что при аварийном завершении программы выходной буфер может быть не выгружен, и возможна потеря данных.
Ввод/вывод в поток Ввод/вывод в поток можно осуществлять различными способами: в виде последовательности байтов, в виде символов и строк или с использованием форматных преобразований. Операции ввода/вывода выполняются начиная с текущей позиции потока, определяемой положением указателя потока. Указатель устанавливается при открытии на начало или конец файла (в соответствии с режимом открытия) и изменяется автоматически после каждой операции, ввода/вывода. Текущее положение указателя можно получить с помощью функций ftel1 и fgetpos и задать явным образом с помощью функций fseek и fsetpos. Эти функции нельзя использовать для стандартных потоков (stdin - стандартный поток ввода данных, stdout - стандартный поток вывода данных и stderr - стандартный поток ошибок).
• Чтение и запись потока байтов выполняют функции fread и fwrite. • Чтение символа из потока — getc, fgetc, из стандартного потока stdin — getchar. • Запись символа в поток — put с, fputc, в стандартный поток stdout — putchar. • Чтение строки из потока — fgets, из стандартного потока stdin — gets. • Запись строки в поток — fputs, в стандартный поток stdout — puts. • Форматированный ввод из потока — fscanf, из стандартного потока stdin —scanf, из строки — sscanf. • Форматированный вывод в поток — fprintf, в стандартный поток stdout —printf, в строку — sprintf.
Закрытие потока
Поток закрывается либо при завершении программы, либо явным образом с помощью функции fclose:
int fclose(FILE*):
Перед закрытием потока информация из связанных с ним буферов выгружается на диск. Рекомендуется всегда явным образом закрывать потоки, открытые для записи, чтобы избежать потери данных.
Обработка ошибок
Функции работы с потоком возвращают значения, которые рекомендуется анализировать в программе и обрабатывать ошибочные ситуации, возникающие, например, при открытии существующих файлов или чтении из потока. При работе с файлами часто используются функции feof и terror: int feof (FILE*) возвращает не равное нулю значение, если достигнут конец файла, в противном случае 0; int terror (FILE*) возвращает не равное нулю значение, если обнаружена ошибка ввода/вывода, в противном случае 0.
Не нашли, что искали? Воспользуйтесь поиском:
|