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
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
).
Więc 'stringstream' byłby lepszy do obsługi naprawdę dużego pliku tekstowego, który chciałem parsować wiersz po linii? –
Zobacz [std :: getline] (http://en.cppreference.com/w/cpp/string/basic_string/getline). – Casey
@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ą. –