Файлы. Общая концепция организации ввода-вывода данных в С++. Средства класса ios, обеспечивающие точную настройку вывода, страница 20

{ofstreamoutfile (“test.txt”);   //создается поток и в текущей папке открывается файл

if ( !outfile) {

cout << “Input error\n ”;

return 1;

}

outfile << “Salut!\n”;      

outfile << 100 << ‘ ‘ <<hex << 100 <<endl;

cout << “file end\n”;

outfile.close();

ifstream infile (“test.txt”, ios::nocreate);   //создается поток infile

if ( !infile) {

cout << “Input error\n ”;

return 1;

}

char str[80];

int i, j;

infile >> str >> i >> j;    //ввод из потока значений переменных

cout << str << endl     

<< i << ‘ ‘ << j <<endl; //вывод значений на экран

return 0;  

}

Вывод показывает, что в файле содержится информация:

Salut!

100  64

5. Посимвольный ввод-вывод в текстовый файл

Для посимвольного ввода-вывода в текстовый файл можно использовать функции put() и get(), являющиеся методами классов ostream и istream соответственно, и использующиеся для ввода и вывода отдельных символов:

#include <fstream.h>

#include <iostream.h>

#include <string.h>

int main()

{char str[ ] = “aaaaa bbbbb ccccc dddddd  ”    //определение и инициализация                                       “eeeeee fffffff  iiiiiiii  jjjjjjjjjj”;  // строки

ofstreamoutfile (“TEST.TXT”);                 //создание выходного потока

for (unsigned j=0; j<strlen(str); j++)

outfile.put(str[j]);      //посимвольный вывод в файлэлементов строки

cout << “file end\n”;

outfile.close();

char ch;        

ifstream infile (“TEST.TXT”, ios::nocreate);   //создается входной поток

while (infile)        //чтение производится до конца файла или возникновения ошибки

{infile.get(ch);

cout << ch;  

}

cout <<endl;  

return 0;  

}

Можно выдать содержимое файла и другим способом: просто вывести буфер файлового потока   infile в поток cout:

cout << infile.rdbuf();                  

cout <<endl;   

Тогда в нашем случае имеем:

char ch;         

ifstreaminfile (“TEST.TXT”, ios::nocreate);   //создается входной поток

cout << infile.rdbuf();     //функция rdbuf читает буфер файлового потока   infileи                                                        //выводит его содержимое в стандартный поток cout         

cout <<endl;   

return 0;  

}

6. Ввод-вывод в текстовый файл при задании имени файла в командной строке в качестве параметра функции  main()

 В данной программе введенные с клавиатуры строки записываются в файл. При вводе символа «$» (в качестве первого символа строки) ввод строк прекращается и файл закрывается. Затем файл открывается уже для считывания и записанная там информация выводится на экран. Имя файла для вывода задается в командной строке в качестве параметра функции main():

#include <fstream.h>

#include <iostream.h>

#include <string.h>

int main (int argc, char *argv[])

{

if (argc!=2) {

cout << “Input name of file\n”;

return 1;

}

ofstreamoutfile (argv[1]);   //создается объект поток и открывается файл,                                           //имя которого совпадает со вторым  аргументом командной строки

if ( !outfile) {

cout << “Input error\n ”;

return 2;

}

char str[80];

cout << “string?  end - $\n”;

cin.getline (str, 80);

while (*str != '$')

{          outfile << str << endl;

cout << " ? : ";

cin.getline (str, 80);

}

cout << “file end\n”;

outfile.close();

ifstream infile (argv[1], ios::nocreate);   //создается объект infile класса ifstream

if ( !infile) {

cout << “Input error\n ”;

return 3;

}

infile >> str;

if (infile.eof())  return 2;       //если  «конец файла»

do                       

{ cout <<str <<endl;

infile >>str;

} while (!infile.eof());                          //пока «не конец файла»

//функция infile.eof() возвращает true, если конец файла