Wczytywanie danych z pliku

0

Witam. Pamiętam, że istnieje sposób, aby jedną pętlą beż żadnych getline'ów i tym podobnych pobrać cały plik tekstowy do jednej zmiennej typu string wraz ze znakami białymi. Szukałem w internecie ale nigdzie tego nie ma a ja po prostu zapomniałem. Pamiętam, że wykorzystywało się do tego eof(). Dzięki z góry.

0

No można nawet bez pętli (jawnej)...

#include <string>
#include <iterator>
#include <algorithm>
#include <fstream>
#include <iostream>

int main() {
	constexpr const char * fileName = "data.txt";

	std::string messages;
	{
		std::ifstream file(fileName);
		using iIter = std::istreambuf_iterator<char>;
		std::copy(iIter(file), iIter(), std::back_inserter(messages));
	}

	// Kontrolnie... 
	std::cout << messages;
}

A jak koniecznie pętlą to..

#include <iostream>
#include <fstream>
#include <string>

int main() {
	constexpr const char * fileName = "data.txt";

	std::string message;
	{
		std::ifstream file(fileName);
		char c;
		while(file >> c) {
			message.push_back(c);	
		}
	}
	// Kontrolnie
	std::cout << message;
}

Który lepszy i wydajniejszy (i czy wydajne), to już inna dyskusja.

0

Można jeszcze odczytać wielkość pliku, zarezerwować odpowiednio duży bufor i wczytać całość pliku do niego za jednym razem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1