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 байт.


 

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

31740. Роль и место ИПБ России в деле реформирования бухгалтерского учета 28.5 KB
  Формирование в РФ ИПБ явилось следствием осуществления реформы бухгалтерского учета в стране. ИПБ активно включился в процесс реформирования учета так как одна из основных целей его создания является разработка новой методологии и методики учета в стране. Являясь добровольным союзом квалифицированных аттестованных профессиональных бухгалтеров ИПБ России призван не только защищать интересы своих членов но и определять новые формы и методы организации учета.
31741. Российская Коллегия аудиторов (РКА) 34 KB
  Основными целями и задачами Коллегии являются: защита и представление законных интересов членов Коллегии в государственных и общественных организациях содействие в профессиональной подготовке и оказание всесторонней поддержки членами Коллегии; содействие разработке основных принципов организации аудита на территории Российской Федерации рекомендаций по совершенствованию форм и методов аудиторской деятельности; координация деятельности членов Коллегии. В соответствии со своими целями и задачами Коллегии осуществляет следующие виды...
31744. Разработка мероприятий по переходу на автоматизированную систему учета 27 KB
  Можно обрабатывать и тщательно контролировать данные в одном отделе однако это потенциально ослабляет контрольные возможности сотрудников из других подразделений в том числе для сравнения и анализа результатов Автоматическое подтверждение санкционирование некоторых типовых операций например удержания из всех видов заработка и начисления на них взносов во внебюджетные фонды Процесс создания программного продукта период обладания правами на него и его модификации защита от пиратского использования в совокупности составляют понятие...
31745. Региональные организации 32 KB
  Довольно развитая система рассмотрения споров существует в рамках ОБСЕ.Основы специального механизма по разрешению споров были заложены Советом СБСЕ в 1992 г.Из других региональных организаций процедура мирного разрешения споров наиболее основательно урегулирована в рамках Совета Европы.
31746. Реформирование бухгалтерского учета в России 34 KB
  Реформирование бухгалтерского учета в России. Переход России к рыночной экономике в начале девяностых годов вызвал необходимость реформирования бухгалтерского учета в стране. Система отечественного бухгалтерского учета должна трансформироваться отражая реформу экономики России и связанные с ней изменения принципов и объектов учета. Необходимость реформы бухгалтерского учета в России была очевидна однако конкретные направления ее вызывали дискуссии ученых и специалистов.
31747. Сегментарна структура ринку фінансових послуг 133.5 KB
  Сегментарна структура ринку фінансових послуг 1. Методологічні підходи до вирішення проблеми структуризації ринку фінансових послуг 2. Методи структуризації ринку фінансових послуг 3. Поняття сегментації ринку фінансових послуг 4.
31748. ФІНАНСОВІ ПОСЛУГИ НА ГРОШОВОМУ РИНКУ 97.5 KB
  Організація та особливості функціонування депозитного ринку Залучення коштів вкладників та інших кредиторів – це основний вид пасивних операцій банків. Максимальний розмір залучених коштів залежить від власного капіталу банків. Поточні пасиви формуються залишками коштів на розрахункових поточних і кореспондентських рахунках. Операції пов'язані із залученням грошових коштів на вклади називаються депозитними.