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


 

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

51284. Основные режимы движения механизма 907 KB
  При установившемся режиме скорость начального звена изменяется периодически. Причиной является периодический характер действия сил и моментов, приложенных к механизму, а также периодические изменения приведенного момента инерции механизма
51285. Изучение явления интерференции света с помощью бипризмы Френеля 82 KB
  Цель работы: Изучение поляризованного света явлений вращения плоскости поляризации в оптически активных растворах и магнитных полях определение постоянной вращения постоянной Верде и концентрация оптически активных растворов. Приборы и принадлежности: круговые поляриметры трубки с оптически активными соленоид выпрямитель миллиметровка Определение постоянной вращения сахарных растворов.5 По формуле вычислим концентрацию: Вывод: в ходе работы изучили: излучение поляризованного света явление вращения плоскости поляризации в...
51286. исследование дисперсии стеклянной призмы 74 KB
  Цель работы: Наблюдение линейных спектров испускания определение показателя преломления оптического стекла для различных длин волн и построение кривой дисперсии этого стекла определение дисперсионных характеристик призмы. Определение зависимости Преломляющий угол...
51287. Изучение явления интерференции света в тонких плёнках на примере колец Ньютона 131.5 KB
  Цель работы: изучение явления интерференции света определение радиуса кривизны линзы с помощью колец Ньютона определение длины волны пропускания светофильтров
51289. Изучение методов получения когерентных источников света искусственным делением фронта световой волны (бипризма Френеля) 42.5 KB
  Цель работы: изучение методов получения когерентных источников света искусственным делением фронта световой волны бипризма Френеля; изучение явления интерференции света; определение длины волны источника света и расстояний между когерентными источниками света. Приборы и принадлежности: источник света светофильтры раздвижная щель бипризма Френеля микроскоп с отсчет ной шкалой оптические рейтеры.Определение длины волны источника света. Вывод: изучили методы получения когерентных источников света искусственным делением...
51290. Иучение явления интерференции света с помощью бипризмы Френеля 52.5 KB
  Цель работы: Изучение методов получения когерентных источников света искусственным делением фронта световой волны бипризма Френеля; изучение явления интерференции света. Приборы и принадлежности: источник света светофильтры раздвижная...
51291. Изучение явления дифракции света с помощью лазера 55 KB
  Цель работы: изучение явления дифракции света в параллельных лучах дифракция Фраунгофера; практическое знакомство с работой газового лазера непрерывного действия. Вычисления заносим в таблицу...
51292. Финансы и финансовая деятельность 178.88 KB
  Финансы — это экономические денежные отношения по формированию, распределению и использованию фондов денежных средств государства, его территориальных подразделений, а также предприятий, организаций и учреждений, необходимых для обеспечения расширенного воспроизводства и социальных нужд, в процессе осуществления которых происходит распределение и перераспределение общественного продукта и контроль за удовлетворением потребностей общества.