Главная
Регистрация
Вход
Суббота
23.11.2024
05:44
Приветствую Вас, Гость | RSS

Меню сайта

Друзья сайта

Категории раздела
1. Основы работы в среде C++ Builder.Основы языка Си++ [9]
2. Операторы ветвления и операторы передачи управления [4]
3. Операторы цикла и операторы передачи управления [5]
4. Одномерные массивы [3]
5. Многомерные массивы [3]
6. Указатели.Динамическое распределение памяти [6]
7. Отладка программы [3]
8. Функции [8]
9. Строки [5]
10. Функция Main [2]
11. Типы данных,определяемые пользователем [5]
12. Потоки ввода/вывода [7]
13. Основы объектно-ориентированного программирования [5]
Приложения [11]

Форма входа

Наш опрос
Оцените мой сайт
Всего ответов: 446

Пользователи

Онлайн всего: 10
Гостей: 10
Пользователей: 0

 Каталог статей 
Главная » Статьи » Лекции по C++ » 12. Потоки ввода/вывода

PDA-версия страницы

2. Операции с потоками при использовании библиотеки stdio.h

Файловый ввод/вывод при использовании библиотеки stdio.h. состоит из трех основных шагов:

открытие потока;

ввод/вывод в поток;

закрытие потока.

Открытие потока

Открытие потока включает следующие операции:

1. Объявление указателей на файловые потоки:

FILE *fp1,*fp2;

2. Открытие файла и связывание его с указателем потока с помощью функции fopen:

f1=fopen('d:\\mydir\\myfile', 'w');

Эти операции можно объединить в одну:

FILE *fp1=fopen('d:\\mydir\\myfile', 'w');

Здесь первый параметр, строка – имя файла. Если имя файла включает имена папок, в которых он находится, то они отделяются двойным обратным слэшем  \\.

Второй параметр, строка – задает режим, в котором открывается файл:

"г" – файл открывается для чтения;

"w" – открывается пустой файл для записи (если файл существует, он стирается);

"а"   – файл открывается для добавления информации в его конец;

"г+" – файл открывается для чтения и записи (файл должен существовать);

"w+" – открывается пустой файл для чтения и записи (если файл существует, он стирается);

"а+" – файл открывается для чтения и добавления информации в его конец.

Режим открытия может также содержать символы t (текстовый режим) или b (двоичный режим), отличающиеся обработкой символов перехода на новую строку. По умолчанию файл открывается в текстовом режиме, при котором комбинация символов «возврат каретки» и «перевод строки» (0x13 и 0x10) при вводе преобразуются в одиночный символ перевода строки (при выводе выполняется обратное преобразование). В двоичном режиме эти преобразования не выполняются.

Пример:

FILE *f = fopen("d:\\cpp\\data",  "rb+");

Открывается поток f связанный с двоичным файлом d:\\cpp\\data для чтения и записи

Проверка правильности открытия потока

При успешном открытии потока функция возвращает указатель f на предопределенную структуру типа FILE, содержащую всю необходимую для работы с потоком информацию, или NULL в противном случае. Поэтому в программу обязательно добавляется код проверки правильности открытия потока, чтобы не было 'зависания' компьютера:

FILE *f, *fo;

if((f = fopen("d:\\c\\file.txt", "r")) == 0)

{cout << "Ошибка открытия входного файла"; return 1;}

В этом примере при неудачном открытии потока произойдет завершение выполнения функции, в которой открывается поток. Функция возвратит значение 1 с помощью оператора return 1;

Указатель f используется в дальнейших операциях с потоком. Его передают функциям ввода/вывода в качестве параметра.

При открытии потока с ним связывается область памяти, называемая буфером. При выводе вся информация направляется в буфер и накапливается там до заполнения буфера или до закрытия потока. Чтение осуществляется блоками, равными размеру буфера, и данные читаются из буфера. Буферизация позволяет более быстро и эффективно обмениваться информацией с внешними устройствами. Следует иметь в виду, что при аварийном завершении программы выходной буфер может быть не выгружен, и возможна потеря данных. С помощью функций setbuf и setvbuf можно управлять размерами и наличием буферов.

Существует пять предопределенных потоков, которые открываются в начале работы программы: стандартный ввод stdin(связан с клавиатурой), стандартный вывод stdout(связан с дисплеем), стандартный вывод сообщений об ошибках stderr(связан с дисплеем), стандартный дополнительный поток stdaux и стандартная печать stdprn. Эти указатели можно использовать в любой функции ввода/вывода там, где требуется указатель потока.

Закрытие потока

Поток закрывается либо при завершении программы, либо явным образом с помощью функции fclose:

fclose(указатель на поток);

Перед закрытием потока информация из связанных с ним буферов выгружается на диск. Рекомендуется всегда явным образом закрывать потоки, открытые для записи, чтобы избежать потери данных.

Категория: 12. Потоки ввода/вывода | Добавил: Admin (01.09.2011)
Просмотров: 6215 | Рейтинг: 4.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Помочь сайту!
рублей WMR
WebMoney на кошелек R407507742179

Партнёры сайта

Закладки

Поиск по сайту

Copyright H-L-L.RU © 2024
Сделать бесплатный сайт с uCoz