Добавил:
ПОИТ 2016-2020 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
40
Добавлен:
29.04.2018
Размер:
824.83 Кб
Скачать

Int main()

{ using namespace std;

char p[100];

fstream inout;

inout.open ("a.txt", ios_base::in | ios_base::out | ios_base:: trunc); // Открыть файл для чтения и для записи (если файл не существует, он будет создан), уничтожить содержимое файла, если файл сущ.

inout<<"This is string"<<endl; // вывод в файл

inout.seekg(0); //установка на начало

inout.getline(p, 50); //чтение строки из файла

Inout.Seekg(0);

cout<<endl<< inout.rdbuf(); //на экран

inout.close(); //закрыть поток

}

Работа с классом ofstream

Если файл будет использоваться только для вывода, определяется объект класса ofstream.

Пример

#include <fstream>

using namespace std;

Int main()

{ ofstream outf; //переменная типа ofstream

outf.open("a.txt"); //открытие файла

if (outf == NULL) return 0; //выход, если не открывается файл

for (int i = 0; i < 2; i++)

outf << "string" << i << endl; //вывод в файл

outf.close(); //закрытие файла

}

Функция put() используется для вывода символа в выходной поток.

Функция-член write()  класса ostream дает альтернат. метод вывода массива символов. Вместо того чтобы выводить символы до завершающего нуля, она выводит указанное число символов, включая и внутренние нули, если таковые имеются:

ostream& write(const char* buffer, int size); записывает в ostream содержимое буфера buffer количеством size символов. Буфер записывается без форматирования.

Работа с классом ifstream

Чтобы открыть файл только для чтения, применяется объект класса ifstream.

Сигнатура getline(): getline (char * buffer, streamsize size, char delimiter='\n')

Парной для функции write() из класса ostream явл. функция read() из класса istream с сигнатурой: read ( char* buffer, streamsize size );

читает size соседних байт из входного потока и помещает их, начиная с адреса buffer.

Пример . Прочитать содержимое предварительно созданного файла "a.txt" с некоторым содержимым.

#include <iostream>

#include <fstream>

using namespace std;

Void main()

{ char c;

ifstream in;

in.open("a.txt");

while (!in.eof())

{ c = in.peek(); //считывание символа

if (c == 'A')

{ int i = in.tellg();

in.seekg( ++i);

}

in.get(c);

cout<<c;

}

in.close();

}

Функция  int peek() читает символ.

Примеры

=======================================================================

Программа создает объект типа ofstream и выводит неск. строк текста в файл А.DAT.

#include <fstream>

using namespace std;

void main(void)

{ ofstream prm1("A.DAT");

prm1 << "Text1" << "Text2" << endl;

prm1 << "Text3" << endl;

prm1 << "Text4" << endl;

}

================================

Программа открывает файл A.DAT, кот. создан с помощью предыд. программы, читает его и отобр. первые три элемента.

#include <iostream>

#include <fstream>

using namespace std;

void main(void)

{ ifstream prm2("A.DAT") ;

char one[64], two[64], three[64];

prm2>> one;

prm2>> two;

prm2>> three;

cout << one << endl;

cout << two << endl;

cout << three << endl;

}

===========================

Программа использует функцию getline для чтения всех трех строк файла A.DAT.

#include <iostream>

#include <fstream>

using namespace std;

void main(void)

{ ifstream prm3("A.DAT");

char one[64], two[64], three [64] ;

prm3.getline(one, sizeof(one));

prm3.getline(two, sizeof(two));

prm3.getline(three, sizeof(three)) ;

cout << one << endl;

cout << two << endl;

cout << three << endl;

}

=============================

Программа читает файл по одному символу за один раз, используя функцию get, пока не встретит конец файла:

#include <iostream>

#include <fstream>

using namespace std;

void main(void)

{ ifstream prm4("A.DAT");

char letter;

while (! prm4.eof()) //достигнут ли конец файла?

{ letter = prm4.get();

cout << letter;

}

}

===============================

Исп. функция eof для чтения содержимого файла A.DAT.

#include <iostream>

#include <fstream>

using namespace std;

void main(void)

{ ifstream prm5("A.DAT");

char line[64];

while (! prm5.eof())

{ prm5.getline(line, sizeof(line));

cout << line << endl;

}

}

=============================

Читается содержимое файла по одному слову за один раз.

#include <iostream>

#include <fstream>

using namespace std;

void main(void)

{ ifstream prm6("A.DAT");

char word[64] ;

while (! prm6.eof())

{ prm6 >> word;

cout << word << endl;

}

}

Если программа должна вводить или выводить такие данные, как структуры или массивы, то можно использовать методы  read и write.

Функция gcount() возвращает число байт, прочитанных при последнем обращении к read().

Пример.

1 вариант

#include <iostream>

#include <fstream>

using namespace std;

struct mystruct {

long i;

char buf[255];

double d;

};

int main()

{ setlocale(LC_ALL,"Russian");

const char *FName = "A.bin";

mystruct X;

X.i = 10; //запись значения в поле i

X.d = 2; //запись значения в поле d

strcpy_s(X.buf, "кафедра ИСиТ"); //запись текста в поле buf

ofstream ft(FName, ios::binary | ios::out); //открытие файла для записи

ft.write((char*)&X, sizeof X); //запись структуры

ft.close();

ifstream in(FName, ios::binary|ios::in);

in.read((char*)&X, sizeof X); //чтение структуры

in.close();

cout<<X.buf<<"\n";

return 0;

}

2 вариант

int main()

{ setlocale(LC_ALL,"Russian");

const char *FName = "A.bin";

mystruct X;

X.i = 10; X.d = 2;

strcpy_s(X.buf, "кафедра ИСиТ");

fstream ft(FName, ios::binary | ios::out |ios::in);

ft.write((char*)&X, sizeof X);

ft.seekg(0);

ft.read((char*)&X, sizeof X);

ft.close();

cout<<X.i<<"\n";

cout<<X.buf<<"\n";

cout<<X.d<<"\n";

return 0;

}

Русский шрифт

#include <iostream>

#include <fstream>

#include <windows.h>

using namespace std;

struct St

{ char ab[30];

};

Соседние файлы в папке Лекции