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


 

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

54000. Science and Inventions “Scientists and their Contributions to the World Science” 134 KB
  Glad to hear that. The more so because I am going to give you some food for thought. As at the previous lessons we spoke about science and how it is important in our life, I think it won`t be difficult for you to understand and explain the meaning of the following words which were once said by a famous writer B.Shaw...
54001. Sports. Plural (irregular nouns) 223.5 KB
  On February we’ll have the world sport competitions which called the Olympic Games. There are winter and summer Olympic Games. The last summer Olympic Games were in Perkin in China. The next winter Olympic Games will take part in Vancouver in Canada. The team of our country will take part in these competitions.
54002. What’s the weather like? 148 KB
  Today we are going to speak about the weather, about your favourite seasons. You know, the weather is a safe topic for a conversation. That's why we should be good at it.
54003. Я сохраняю энергию 836.52 KB
  At the end of the lessons students are evaluated and given the hometask to create a group outcome project to be considered by school authority for further long-term implementment and for further its presentation as promotion of eco-consciousness among pupils of the gymnasium.
54004. We are Ukrainians 416.5 KB
  Objectives: to improve skills in speaking, reading, listening, to organize lexical material on the topic. To develop speech reaction, thinking, memory, attention and creativity of pupils, nurture positive attitude to the interlocutor, to bring up the lines of patriotism in pupils, love for his native land, motherland Ukraine.
54005. My family and friends 33.5 KB
  So, you’re right, we’ll talk about our families and friends but I realized that it is a little bit difficult for you to guess the topic of our today’s lesson and I hope next ex. will help you…
54006. SPORT 55 KB
  The equipment you need is skis, boots and poles. Clothes are very important too because they protect you from cold weather. You need a ski-suit, a hat, goggles to protect your eyes, socks, mittens.
54007. На життєві йдучи видноколи, не розтратьте найкращих чуттів, будьте гідні рідної школи, будьте гідні своїх вчителів! 108.5 KB
  Будьте гідні рідної школи Будьте гідні своїх вчителів за творчістю випускників Чернівецької гімназії № 5: Ірини Вільде Ореста Масикевича Володимира Кобилянського Дмитра Загула Тараса Унгуряна Андрія Шкургана Олександра Маслюченка Єлєни Даскал Мета: ознайомити учнів з цікавими фактами життя і творчості майстрів художнього слова які навчались у Чернівецькій гімназії № 5; через художнє слово ввести учнів у чарівний світ поезії; навчити аналізувати поетичні твори; розвивати творчі та комунікативні здібності вміння логічно мислити;...
54008. «The Tsar Bell and the Kunstkammer». Путешествие в Москву и Санкт-Петербург 93 KB
  Write down your home task. Translate the texts «Lake Baikal» and «The Nile» at pages 22, 24 in your workbooks 1; А, В, C, D at page 49 in your textbooks. And please, read the words at page 44 in your textbooks.