Читайте также: |
|
Клас ifstream призначений для організації робіт по введенню (читання) з файлу за допомогою методів цього класу:
- open () - відкриває файл для читання з нього інформації;
- is_open () - повертає true, якщо файл відкритий, і false - у протилежному випадку;
- get () - читає з файлу один символ;
- read () - читає з файлу задане число символів;
- eof () - повертає ненульове значення, коли покажчик позиціонування в файлі досягає кінця файлу;
- peek () - видає черговий символ потоку, але не вибирає його (не зрушує покажчик позиціонування даного в файлі);
- seekg () - переміщає покажчик позиціонування в задане місце
файлу;
- tellg () - видає поточне значення покажчика позиціонування;
- close () - закриває файл;
- rdbuf () - видає покажчик на буфер введення (цей буфер знаходиться в структурі, з якою пов'язується файл при його відкритті).
Приклад використання класу приведений в лістингу 11.
Лістинг 11
ifstream FILE; /* оголошуємо змінну FILE типу ifstream (створюємо екземпляр класу) */
char p [100];
FILE.open ("a.txt"); // викликаємо метод відкриття файлу
if (FILE == NULL) return (0); // невдале відкриття файлу
while (! FILE.eof ()) // перевірка на ознаку кінця файлу
{
FILE >> p; // читання з файлу
cout << p << endl; // вивід прочитаних даних на екран
}
FILE.close (); // закриття файлу
Наведемо програму роботи з файлами введення / виводу (лістинг 12).
Лістинг 12
# Include <vcl.h>
# Include <iostream>
# Include <fstream>
# Include <conio.h>
# Define DelKey 's' / / цей символ буде віддалятися з потоку
# Define maxline 1000
// ------------------------------------------------ -------------------- # pragma argsused
int main (int argc, char * argv [])
{
using namespace std; // використовується стандартне простір імен
// Перевірка виведення
ofstream FILE;
FILE.open ("c: \\ a.txt", ios:: out);
char p [maxline];
int i, pos;
for (i = 0; i <2; i + +)
FILE << "string" << i; /* в даному випадку "<< endl" вводити не треба, інакше його потрібно виводити, і цикл буде довший */
FILE.close ();
// Перевірка введення (читання по записах)
ifstream FILE1;
FILE1.open ("c: \ \ a.txt");
FILE1.seekg (0); /* переміщає покажчик у початок (при відкритті він і так буде на початку, але це просто для демонстрації роботи функції seekg ()) */
if (FILE1 == NULL) / / перевірка на помилку відкриття файлу
return (0);
while (! FILE1.eof ()) // перевірка кінця файлу
{
FILE1 >> p >> i;
cout << p << i << endl;
}
FILE1.close ();
getch ();
// Перевірка посимвольного читання
ifstream FILE2;
char c;
FILE2.open ("c: \ \ a.txt");
if (FILE2 == NULL) // перевірка на помилку відкриття файлу
return (0);
while (! FILE2.eof ()) // перевірка кінця файлу
{
c = FILE2.peek (); /* буде лічений наступний символ, але покажчик позиціонування при цьому не зрушується: залишається на цьому символі */
streampos cgp = FILE2.tellg (); /* визначається поточна позиція у файлі */
if (c == DelKey) /* викидаються всі символи DelKey з читаного потоку */
{
pos = cgp + 1; // готуємося пропустити символ по seekg ()
FILE2.seekg (pos); /* пересунули покажчик позиціонування на один символ далі, щоб пропустити символ */
continue; // на продовження циклу
}
FILE2.get (c); // читання символу в с
cout << c;
} // While
cout << endl;
FILE2.close ();
getch ();
system ("DEL C: \ \ A.TXT"); // видалення робочого файлу
} // Main ()
Дата добавления: 2015-07-10; просмотров: 100 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Загальні положення | | | Робота з бінарним файлом |