2012-12-10 12 views
6

Powiel możliwe:
What is the best way to slurp a file into a std::string in c++?Najkrótsza droga do odczytu pliku tekstowego do String

Sądziłem, że będzie to już kwestia tak, ale nie mogłem znaleźć. Oto moje pytanie.

Jaki jest najkrótszy sposób na odczytanie całego pliku tekstowego w ciągu znaków? Chcę korzystać tylko z funkcji najnowszych bibliotek standardowych i C++.

Myślę, że musi istnieć jedna liniówka do tego powszechnego zadania!

+1

http://stackoverflow.com/a/4761779/942596 ten link daje fajną metodę. zamień wektor na ciąg i działa dalej. – andre

Odpowiedz

7

Prawdopodobnie to:

std::ifstream fin("filename"); 
std::ostringstream oss; 
oss << fin.rdbuf(); 
std::string file_contents = oss.str(); 

Jest to również:

std::istreambuf_iterator<char> begin(fin), end; 
std::string file_contents(begin, end); 

Niektórzy mogą sugerować, ale ja wolę wpisać istreambuf_iterator<char> tylko raz.

std::string file_contents(std::istreambuf_iterator<char>{fin}, std::istreambuf_iterator<char>()); 
1

Aby odczytać plik do std::string przy użyciu jednej instrukcji (czy zmieści się na jednej linii zależy od długości linii z was ...) wygląda następująco:

std::string value{ 
    std::istreambuf_iterator<char>(
     std::ifstream("file.txt").rdbuf()), 
    std::istreambuf_iterator<char>()}; 

Podejście jest niestety często nie tak szybko, jak z dodatkowym std::ostringstream (chociaż powinno być naprawdę szybciej ...).

Powiązane problemy