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
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.