68935

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

Лекция

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

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

Украинкский

2014-09-27

58.5 KB

1 чел.

Лекція № 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 байт.


 

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

35961. Подходы к принятию инвестиционных решений на фондовом рынке: фундаментальный и технический анализ 94.14 KB
  Управление проектами – это методология планирования организации и координации трудовых финансовых и материальнотехнических ресурсов на протяжении проектного цикла направленные на эффективное достижение целей проекта путем применение современных методов техники и технологий управления для достижения определенных в проекте результатов по составу и объему работ стоимости времени качеству и удовлетворению участников проекта. Точечные факторы – факторы связанные с реализацией инвестиционного проекта и состоянием реципиента инвестиции....
35963. Неогей 92 KB
  Башкирский антиклинорий сложен почти не метаморфизованными терригеннокарбонатными отложениями рифеявенда общей мощностью 1014 км среди которых в эрозионном окне выступает глубокометаморфизованный дорифейский фундамент отложения которого объединяются в тараташский гранулитовый комплекс мощностью более 5 км сложенный гиперстеновыми плагиогнейсами и амфиболитами. Рифейсковендский комплекс парастратотипический для рифея разделяется на 3 эратемы снизу вверх: бурзяний R1 общей мощностью 34 км залегающую на архее и сложенную в...
35964. Внимание и его свойства 89 KB
  Устойчивость внимания – длительность сосредоточения внимания на объекте. Устойчивость внимания проявляется в способности в течение длительного времени сохранять состояние внимания на какомлибо объекте предмете деятельности не отвлекать и не ослаблять внимание. У младших школьников устойчивость внимания активно возрастает к 910 годам. Сосредоточенность внимания – степень концентрации внимания на объекте.
35966. Типы восприятия эфирной информации 87 KB
  Преодоление этого объективного противоречия между массовой направленностью и индивидуальностью приема радиопередачи является одним из важных критериев профессионализма радиожурналиста и требует с одной стороны умения говорить на языке потребностей и мотивов поведения всей аудитории выбирать темы и содержание актуальные для нее а с другой – особого стиля общения: доверительномежличностного уважительного по отношению к собеседнику. Пространственная и психологическая рассредоточенность аудитории Аудитория радио не просто...
35967. Понятийный аппарат АХД предприятия 85.5 KB
  Сам термин анализ происходит от греческого слова nlyzis что в переводе означает разделяю расчленяю . Следовательно анализ в узком плане представляет собой расчленение явления или предмета на составные его части элементы для изучения их как частей целого. Наиболее близок к анализу в этом смысле синтез который выявляет связи и зависимости между отдельными частями изучаемого предмета соединяет их в единое целое. под анализом в широком плане понимается способ познания предметов и явлений окружающей среды основанный на расчленении целого...
35968. Схема алкогольного брожения. Влияние основных и вторичных продуктов брожения на формирование органолептических качеств вина. Технохимический и микробиологический контроль брожения. Оформление результатов 84.69 KB
  Влияние основных и вторичных продуктов брожения на формирование органолептических качеств вина. Глюкоза Фосфоенолпируват Пируват Альдегид Этанол Пируватдекарбоксилаза Алкогольдегид рогеназа CO2 NDHH ND Из биологических процессов протекающих в сусле и винах при участии микроорганизмов главным является спиртовое брожение. глицерин влияет на вкус вина придавая ему ощущение сладости и мягкости. Лимонная кислота будучи малоустойчивой в вине может быть источником летучих кислот которые являются показателем наличия пороков у вина.