68935

Функції введення-виведення в потік

Лекция

Информатика, кибернетика и программирование

Бібліотека потоків C++ пропонує набір функцій-членів, які є загальними для всіх операцій введення-виводу потокових файлів. У даному розділі представлені ці функції-члени. Функція-член open відкриває потоковий файл для введення, виводу, дописування (у кінець файлу) і введення-виводу.

Украинкский

2014-09-27

58.5 KB

2 чел.

Лекція № 27

Тема: Функції введення-виведення в потік

План:

  1.  Загальні функції введення-виводу в потік
  2.  Послідовне введення-виведення тексту в потік
  3.  Послідовний двійковий режим потоку введення-виводу файлів
  4.  Введення-виведення потокових файлів довільного доступу

Загальні функції введення-виводу в потік

Бібліотека потоків C++ пропонує набір функцій-членів, які є загальними для всіх операцій введення-виводу потокових файлів. У даному розділі представлені ці функції-члени.

Функція-член open відкриває потоковий файл для введення, виводу, дописування (у кінець файлу) і введення-виводу. Функція-член дозволяє визначити, чи знаходиться потоковий файл введення-виводу в текстовому або двійковому режимі. Представимо декларацію функції-члена open:

void open(const char* szName, int nMode, int nProt = fi lebuf::openprot);

Параметр szName — ім'я файлу, що відкривається. Параметр nMode — ціле число, що містить біти режиму, визначені як елементи типу ios, що перераховує, які можна об'єднати за допомогою операції побітового АБО (|). Параметр nProt — специфікація захисту файлу; він за умовчанням має аргумент filebuf::openprot.

Приведемо декілька прикладів використання функції-члена open.

// Приклад 1

char cAutoExec = "\\AUTOEXEC.BAT";

fstream f;

// відкривається для введення

f.open(cAutoExec, ios:: in);

// Приклад 2

fstream f;

// відкривається для виводу

f.open("MYDATA.DAT", ios::out);

// Приклад 3

fstream f;

// відкривається для введення-виводу з довільним доступом

f.open("RECORDS.DAT", ios::in | ios::out | ios:: binary);

У першому прикладі файл AUTOEXEC.BAT відкривається для введення тексту, в другому — файл MYDATA.DAT відкривається для виведення тексту, а в останньому прикладі файл RECORDS.DAT відкривається для двійкового введення і виводу, який насправді є режимом довільного доступу.

Функція-член close "виштовхує" весь чекаючий вивід в потік і закриває буфер потокового файлу. Приведемо декларацію цієї функції-члена:

void close( );

Представимо приклад використання функції-члена close.

char cAutoExec = "\\AUTOEXEC.BAT";

fstream f;

// відкривається для введення

f.open(cAutoExec, ios:: in);

// оператори введення-виводу

f.close(); // закриває буфер потоків файлу

У прикладі файл AUTOEXEC.BAT відкривається для введення; виконуються дії введення, які не відображені в програмі, а потім закривається буфер потокового файлу.

Функція-член good, яка повертає відмінне від нуля значення, якщо немає ніяких помилок в потокових операціях. Декларація цієї функції-члена:

int good ();

 

Функція-член fail, яка повертає відмінне від нуля значення, якщо в потокових операціях є помилка. Декларація цієї функції-члена:

int fail ();

Функція-член eof, яка повертає відмінне від нуля значення, якщо потік досяг кінця файлу. Декларація цієї функції-члена:

int eof ();

Перевантажений оператор !, який визначає стан помилки. Аргументом цього оператора є об'єкт-потік.

Послідовне введення-виведення тексту в потік

Бібліотека потоку C++ пропонує операторів << і >> і функцию-член getline для підтримки текстових потоків введення-виводу. Декларація функції-члена getline:

istream& getline(char» pszStr, int nCount, char cDelim = \n);

istream& getline(signed char* pszStr, int nCount char cDelim = \n);

istream& getline(unsigned char* pszStr, int nCount char cDelim = \n);

Параметр pszStr — покажчик на ASCIIZ-строку. Параметр nCount визначає максимальне число знаків, що вводяться. Параметр cDelim визначає роздільник рядків.

Приведемо приклад використання функції-члена getline для введення-виводу файлу.

const i nt MAX_CHARS = 81;

char aline[MAX_CHARS];

fstream f;

f.open(“README.DOC", ios::in);

while (!f.eof()) {

f. getline(aline, MAX_CHARS);

cout « aline « endl;

}

f.close();

У прикладі відкривається файл README.DOC для введення тексту. Фрагмент програми містить цикл while, який читає кожен рядок файлу і виводить його на пульт. Операція введення використовує функцию-член getline.

Послідовний двійковий режим потоку введення-виводу файлів

Бібліотека потоку C++ пропонує функції-члени read і write для читання і запису потокових файлів.

Функція write. Клас ostream оголошує функцию-член write таким чином:

ostream& write(const char* pch, int nCount);

ostream& write(const unsigned char* puch, int nCount);

ostream& write(const signed char* psch, int nCount);

Параметри pch, puch і psch — покажчики на масиви символів; параметр nCount визначає число символів, які потрібно записати. Функція-член вставляє вказане число байтів з буфера в потік. Якщо основний файл був відкритий в режимі тексту, можуть бути вставлені додаткові знаки повернення каретки. Функція-член write використовується в основному для двійкового вихідного потоку.

Приведемо приклад використання функції-члена write.

const int MAX_CHARS = 80;

char cName[MAX_CHARS + 1]= "Namir Shammas";

int nNumChars = strlen(cName)+ 1;

fstream f;

f.open(“MYDATA.DAT", ios::out | ios::binary);

// записати кількість символів

f.write((const unsigned char*)&nNumChars, sizeof(nNumChars));

// записати символи

f.write((const unsigned char*)cName, nNumChars);

f.close();

 

У прикладі відкривається файл MYDATA.DAT для двійкового виводу при посилці повідомлення C++ open об'єкту f (екземпляр класу fstream). Два останні виконувані оператори записують число символів, що виводяться, а потім — безпосередньо самі символи, посилаючи повідомлення C++ write об'єкту f. Аргументи першого повідомлення write — перетворена до відповідного вигляду адреса змінної nNumChars і вираз sizeof(nNumChars). Аргументи другого повідомлення — строкова змінна cName і змінна nNumChars.

Функція read. Клас istream оголошує функцию-член read таким чином:

istream& read(char* pch, int nCount);

istream& read(unsigned char* puch, int nCount);

istream& read(signed char* psch, int nCount);

Параметри pch, puch і psch — покажчики на масиви символів; параметр nCount визначає максимальне число символів для читання. Функція-член витягує байти з потоку до тих пір, поки не прочитає nCount байтів або не досягне кінця файлу. Функція-член read корисна для двійкового введення в потоці.

Приведемо приклад використання функції-члена read.

const int MAX_CHARS = 80;

Char cName[MAX_CHARS + 1]= "Namir Shammas";

int nNumChars = strlen(cName)+ 1;

fstream f;

f.open("MYDATA.DAT", ios::out | ios::binary);

// читає число символів

f.read((const unsigned char*)&nNumChars, sizeof(nNumChars));

// читає символи

f.read((const unsigned char*)cName, nNumChars);

f.close();

У прикладі відкривається файл MYDATA.DAT для двійкового введення, посилаючи повідомлення C++ open об'єкту f (екземпляр класу fstream). Двох останніх виконуваних операторів читають число символів, що вводяться, і самі символи, посилаючи повідомлення C++ read об'єкту f. Аргументи першого повідомлення read — приведена до відповідного вигляду адреса змінної і вираз sizeof(nNumChars). Аргументи другого повідомлення read — строкова змінна cName і змінна NumChars.

Введення-виведення потокових файлів довільного доступу

При введенні-виводі потокових файлів довільного доступу використовуються функції-члени write, read і seekg. Функція-член seekg дозволяє переміщати покажчик потоку на місце розташування наступного введення або виводу. Декларація функції-члена seekg в класі istream:

istream& seekg(streampos pos);

istream& seekg(streamoff off, ios::seek_dir dir);

 

Параметр pos— нове значення позиції (тип Streampos— typedef-эквивалент зумовленого типу long. Параметр off визначає нове значення зсуву (тип streamoff — також typedef-эквивалент зумовленого типу long). Параметр dir указує напрям пошуку і повинен бути одним з наступних елементів типу, що перераховує.

Елемент перелічувального типу ios::beg, який здійснює пошук від початку потоку.

Елемент перелічувального типу ios::cur, який здійснює пошук від поточної позиції в потоці.

Елемент перелічувального типу ios::end, який здійснює пошук від кінця потоку.

Приведемо приклад використання функції-члена seekg.

const int MAX_CHARS = 80;

char cName[MAX_CHARS + 1]= "Namir Shammas";

int nRecordNumber = 2;

int nNumChars = strlen(cName)+ 1;

fstream f;

f.open(MYDATA.DAT", ios::out | ios::in | ios::binary);

// пошук конкретного запису

f.seekg(nRecordNumber * MAX_CHARS);

// читаємо символи

f. read((const unsigned char*)cName, MAX_CHARS);

f.close();

У прикладі відкривається файл MYDATA.DAT для двійкового введення і виводу при посилці повідомлення C++ Open об'єкту f (екземпляр класу fstream). Приклад встановлює покажчик потоку так, щоб читати запис номер nRecordNumber. Аргумент повідомлення seekg — вираз nRecordNumber * MAX_CHARS; кожен запис має длину— MAX_CHARS байт.


 

А также другие работы, которые могут Вас заинтересовать

73181. Расчет параметров вероятностного графа 77.29 KB
  Вершины графа обозначены таким образом чтобы на первой позиции фиксировалось состояние первого агрегата 1 исправен 0 неисправен. Между вершинами графа проходят дуги показывающие интенсивности потоки...
73182. Исследование операций с множествами 1.12 MB
  Множества А и В равны тогда и только тогда когда каждый элемент множества А является элементом множества В и наоборот каждый элемент множества В является элементом множества А т. Пересечением или произведением двух множеств называется множество состоящие из всех тех элементов...
73183. Расчет временных параметров и определение критического пути сетевого графика 699.13 KB
  Событие 1: принятие решения о подборе персонала на работу; Событие 2: определение потребности в новых работниках; Событие 3: разработка требований к кандидатам на новую должность c использованием разнообразных источников: анализ работ, исследование корпоративной культуры...
73185. Принципы построения и организационная структура Интернет. Адресация в Интернете. Базовые протоколы (IP, TCP, UDP). Назначение портов. Программы Ping, TraceRoute, NetScanner 554 KB
  Маршрутизаторы объединяют отдельные сети в общую составную сеть (см. рисунок ниже). К каждому маршрутизатору могут быть присоединены несколько сетей (по крайней мере две). Маршрут - это последовательность маршрутизаторов, которые должен пройти пакет от отправителя до пункта назначения.
73186. Информационный поиск в Веб 76.69 KB
  Гипертекст - принцип организации информационных массивов, при котором отдельные информационные элементы связаны между собой ассоциативными отношениями, обеспечивающими быстрый поиск необходимой информации и/или просмотр взаимо- связанных данных.
73187. ОСНОВНЫЕ СВЕДЕНИЯ О КОНЦЕПЦИИ СЕМАНТИЧЕСКОГО WEB 24 KB
  Возможность интегрировать в Интернет объекты реального мира благодаря унификации обмена данными. Организация такого представления данных в сети, чтобы допускалась не только их визуализация, но и их эффективная автоматическая обработка программами разных производителей.
73188. Интеграция и взаимодействие в сети Веб 43.55 KB
  В многих компаниях уже сложилась тенденция предоставлять своим сотрудникам, партнерам и клиентам доступ ко всем типам информации и сервисов посредством сети Веб. Однако в корпоративных сетях компаний функционирует огромное число разнородных бизнес-приложений, созданных в различное время...
73189. GRAMMATICAL CLASSES OF WORDS 67.5 KB
  The problem of parts of speech is one that causes great controversies both in general linguistic theory and in the analysis of separate languages. We shall have to examine here briefly a few general questions concerning parts of speech which are of some importance for Modern English.