Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 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.

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных