2013-06-10 18 views
7

Nie znajduję jednoznacznej odpowiedzi na jeden aspekt obiektu fstream niezbędny do określenia, czy warto go użyć. Czy fstream przechowuje swoją zawartość w pamięci, czy jest bardziej jak wskaźnik do lokalizacji w pliku? Pierwotnie używałem CFile i czytałem tekst do CString, ale wolałbym nie mieć całego pliku w pamięci, jeśli mogę tego uniknąć.Jak działa strumień? Pamięć lub plik?

Odpowiedz

5

fstream jest skrótem od file stream - zwykle jest to połączenie z plikiem w systemie plików hosta. (§27.9.1.1/1: "Klasa basic_filebuf<charT,traits> kojarzy zarówno sekwencję wejściową, jak i sekwencję wyjściową z plikiem.")

Zwykle buforuje niektóre informacje z tego pliku, a jeśli zdarzy ci się pracować z małym plikiem może się zdarzyć, że zmieści się w buforze. Jednak w typowym przypadku większość danych znajduje się w pliku na dysku (lub przynajmniej w pamięci podręcznej plików systemu operacyjnego) z pewną stosunkowo niewielką jego częścią (zazwyczaj kilka kilobajtów) w buforze fstream.

Jeśli nie chcesz użyć bufor w pamięci i mają działać jak plik, można normalnie używać std::stringstream (lub wariant jak std::istringstream lub std::ostringstream).

+0

Więc 'stringstream' byłby lepszy do obsługi naprawdę dużego pliku tekstowego, który chciałem parsować wiersz po linii? –

+0

Zobacz [std :: getline] (http://en.cppreference.com/w/cpp/string/basic_string/getline). – Casey

+1

@JoeMajsterski: nie, prawdopodobnie nie. Strumień ciągów jest zwykle używany jako bufor tymczasowy do (na przykład) formatowania danych przed wyświetlaniem lub odczytywania linii w czasie z pliku, a następnie użycia 'stringstream' do analizowania elementów poza linią. –

Powiązane problemy