2013-06-10 1 views
7

Я не нахожу однозначного ответа на один аспект объекта fstream, необходимый для определения того, стоит ли его использовать. fstream хранит его содержимое в памяти или больше похоже на указатель на местоположение в файле? Первоначально я использовал CFile и читал текст в CString, но я бы предпочел не иметь весь файл в памяти, если я смогу его избежать.Как работает fstream? Память или файл?

ответ

5

fstream не подходит для file stream. Обычно это соединение с файлом в файловой системе хоста ОС. (§27.9.1.1/1: «Класс basic_filebuf<charT,traits> связывает как входную последовательность, так и выходную последовательность с файлом.»)

Он (как правило) хранит некоторую информацию из этого файла, и если вы работаете с крошечным файлом, все может случиться, что он будет помещен в буфер. Однако в типичном случае большая часть данных будет находиться в файле на диске (или, по крайней мере, в кэше файлов ОС) с некоторой относительно небольшой его частью (обычно в нескольких килобайтах) в буфере fstream.

Если вы сделал хотите использовать буфер в памяти и он действует как файл, вы обычно использовать std::stringstream (или вариант, как std::istringstream или std::ostringstream).

+0

Значит, 'stringstream' был бы предпочтительнее для обработки действительно большого текстового файла, который я хотел бы разбор строки за строкой? –

+0

См. [Std :: getline] (http://en.cppreference.com/w/cpp/string/basic_string/getline). – Casey

+1

@JoeMajsterski: нет, возможно нет. Строковый поток обычно используется в качестве временного буфера для (например) данных формата перед отображением или для чтения строки за раз из файла, а затем используется 'stringstream' для разбора фрагментов из строки. –

Смежные вопросы