Использование файлов для ввода-вывода информации
Объекты, создаваемые для считывания или записи данных в файлы, называются ofstream. Они являются производными от уже рассмотренного класса iostream. Чтобы приступить к записи в файл необходимо создать объект ofstream, а потом связать его с определённым файлом на диске. Для этого требуется включение в программу файла fstream.h (в этом случае подключение файла iostream.h не нужно).
Объектами iostream поддерживаются флаги, отражающие состояние ввода-вывода. Значение их можно получить при помощи функций.
- Eof() — возвращает TRUE, если в потоке встречается символ EOF (конец файла).
- Bad() — возвращает TRUE при попытке ошибочной операции.
- Fail() —возвращает TRUE как и bad(), а также если операция невыполнима сейчас.
- Good() —возвращает TRUE, когда всё идёт хорошо.
Для открытия файла myfail.txt нужно^
- Создать поток:
- для ввода — ifstream f1;
- для вывода — ofstream f2;
- для ввода и вывода — fstream f3;
- Привязать поток к файлу:
- open(имя_файла, режим, доступ);
- имя файла — параметр типа *char, может содержать полный путь к файлу .
- режим — тип int, значения см. таблице.
- доступ —тип int, задаёт права доступа к файлу (см. таб.)
Режим: |
Ios::app |
Добавление в конец файла, только для вывода |
Ios::ate |
Позиционирование в конец файла |
Ios::binary |
Открытие в двоичном режиме (ввод не текста) |
Ios::in |
Открытие файла для ввода |
Ios::nocreate |
Открыть уже существующий файл |
Ios::noreplase |
Создать новый, если уже есть — ошибка |
Ios::out |
Открытие файла для вывода |
Ios::trunc |
Открытие существующего файла с уничтожением информации в нём, длина файла ==0. |
Атрибуты: |
0 |
Обычный файл, со свободным доступом, по умолчанию |
1 |
Только для чтения |
2 |
Скрытый файл |
4 |
Системный файл |
8 |
Архивный файл |
При использовании параметров по умолчанию можно сделать так:
F2(“d:\\user\\bs-11\\f2.dat”); или
Ifstream f1(“test.txt”);
Ofstream f2(“rez.txt’);
При окончании работы с программой необходимо использовать метод close(), закрытие файла.
F1.close();
F2.close();
#include<fstream.h>
#include<iostream.h>
void main(void)
{ char ch;
int num=0;
char buffer[255];
ofstream fout("rez.txt");
cout<<"результат работы программы: \n";
cin.ignore(1,'\n');
cin.getline(buffer,255);
fout<<buffer<<"\n";
fout.close();
ifstream fin("rez.txt");
fin.unsetf(ios::skipws);
while(!fin.eof())
{fin>>ch;
cout<<ch;
num++;
}
cout <<"\n файл закончился\n число символов :"<<num<<"\n";
fin.close();
}
Результат работы программы:
укнеку нгшгнш №;%435435прорлорл рорлордло олодлод
кнеку нгшгнш №;%435435прорлорл рорлордло олодлод
файл закончилс
число символов :50
Строки
В языке С++ не существует тип данных — строковые, этот тип инициализируется одномерным массивом элементов типа char.
Пример: char *Family=”Орешкина\0”; char Kreek[]=” Helloy, Word!”;
#include<iostream.h>
#include <alloc.h>
#include <string.h>
#include <math.h>
void srav(char* stroka,char* string);
void srav(char* stroka,char* string)
{int i;
i=strcmp(stroka,string); // сравнение двух строк
if(i==0)i=0;
else i=(i<0)?i=-1:i=1;
cout<<"1-ое: "<<stroka<<",2-ое:"<<string<<"\n";
switch(i)
{
case 0: cout <<"они равны\n";break;
case-1: cout <<"1-ое меньше\n";break;
case 1: cout <<"1-ое больше\n";break;
}
}
int main(void)
{
char stroka[80],*ptr,string[80],c='*';
int i;
cout<<"/*результат работы программы\n";
cout <<"Введите строку:";
cin >>stroka;
i=strlen(stroka);
cout<<"длина строки "<< stroka<< "="<<I << endl;
cout <<"_______"<< stroka<<"\n";
strcpy(string,stroka); // копирование второй строки в первую
cout <<"*******"<< string<<"\n";
strcat(stroka,"* Это Я") ; // добавление в первую строку второй
cout << "^^^^^^^"<<stroka<<"\n";
srav(string,stroka);
srav(stroka,stroka);
srav(stroka,string);
ptr = strchr(stroka, c); // проверка на вхождение символа.
if (ptr)
cout << "Символ "<< c <<" находится на " << ptr-stroka+1 << "позиции\n" ;
else
cout<<"Этого символа нет в строке";
cout<<"*//";
return 0;
}
Результат работы программы
Введите строку: Привет
длина строки Привет=6
_______Привет
*******Привет
^^^^^^^Привет* Это Я
1-ое: Привет,2-ое:Привет* Это Я
1-ое меньше
1-ое: Привет* Это Я,2-ое:Привет* Это Я
они равны
1-ое: Привет* Это Я,2-ое:Привет
1-ое больше
Символ * находится на 7позиции