MyTetra Share
Делитесь знаниями!
Работа с файлами
Время создания: 09.08.2017 16:36
Раздел: Computer - Programming - C++

Есть текстовый файл "hello.txt", содержащий 3 строки:


Hello world!

second line

Third Line...


Чтобы прочитать файл построково и вывести данные в консоль, потребуется:



#include <iostream>

#include <fstream>

#include <string>


using namespace std;


int main()

{

ifstream input("hello.txt");

string line;

getline(input, line);

cout << line;

getline(input, line);

cout << line;


getchar();

return 0;

}


Программа выведет 2 первые строки. Если повторить getline еще 2 раза, то последняя строка Third Line... выведется дважда, т.к. последний getline отработает, не затронув строковую переменную line в программе.

Чтобы вывести все строки до конца файла и ничего лишнего, потребуется проверка на достижение конца файла (getline возвращает bool значение false, когда файл заканчивается):


int main()

{

ifstream input("hello.txt");

string line;

while(getline(input, line))

cout << line << "\n";


getchar();

return 0;

}


Вообще файловые потоки можно приводить к true, если с ними можно работать. Выведем сообщение об ошибке, если указанный файл отсутствует:


int main()

{

ifstream input("hello.txt");

string line;

if(input)

{

while(getline(input, line))

cout << line << "\n";

}

else

cout << "Error\n";

getchar();

return 0;

}


Чтение до определенного символа, например, 'o':


while(getline(input, line, 'o'))


Вывод:

Hell

w

rld!

sec

nd line

Third Line...


Создание файла на выходе:


int main()

{

ifstream input("hello.txt");

string line;

if(input.is_open())

{

while(getline(input, line))

cout << line << "\n";

}

else

cout << "Error\n";


ofstream output("output.txt");

output << line << "\nEnd of file.";

getchar();

return 0;

}


Файл будет содержать две строки:

Third Line...

End of file.


Если необходимо дописать в файл, не стирая все его содержимое, то в методе output необходимо указать параметр ios::app. Заодно поместим операции чтения и записи файла в отдельные функции:


void ReadAllFile(const string& path)

{

ifstream input(path);

if(input)

{

string line;

while(getline(input, line))

cout << line << "\n";

}

else

cout << "Error\n";

}


void WriteFileNext(const string& path, const string& text)

{

ofstream output(path, ios::app);

output << text << endl;

}


int main()

{

string path = "file.txt";


WriteFileNext(path, "Hi! It's a test file.\nSecond try\nEnd of file.");

ReadAllFile(path);

getchar();

return 0;

}






 
MyTetra Share v.0.53
Яндекс индекс цитирования