Скопируйте содержимое std::ofstream в строку std::

#c #file #stl #stdstring #ofstream

Вопрос:

У меня есть std::ofstream объект, который еще не был сброшен. Есть ли способ получить содержимое этого ofstream файла и сохранить его в std::string ?

По сути, я хочу, чтобы:

 std::ofstream ofs("somefile.txt");
ofs << "stuff";
someMethod(ofs); //This method streams into ofs as well
ofs <<"blah";
yetAnotherMethod(ofs); //ofs gets violated inside this method as well 
//more data streamed into ofs
std::string s; //Whatever was streamed into ofs should go into s as well for an additional output.
 

Комментарии:

1. Нет. Как насчет использования a std::ostringstream для начала?

2. В этом нет никакого смысла. Однако вы можете довольно легко получить «содержимое» потока входного файла (просто прочитав файл). Какую реальную проблему вы пытаетесь решить с помощью этого? Если это просто любопытство, то все в порядке, но, пожалуйста, скажите так. В противном случае, пожалуйста, вместо этого спросите о вашей реальной проблеме напрямую.

3. @UlrichEckhardt К сожалению, существует фрагмент кода с реализацией, использующей ofstream, и я пытаюсь найти способ работать с ним. Полагаю, я просто перепишу его. 🙁

4. @Someprogrammerdude Я немного изменил код в надежде, что «реальная проблема» ясна. Я пытаюсь понять, смогу ли я избежать необходимости переписывать этот код, но, похоже, мне не повезло.

5. Изменить someMethod() и yetAnotherMethod() принять ostreamamp; вместо ofstreamamp; параметра. Вот так просто и гораздо более универсально.

Ответ №1:

Нет, «содержание этого std::ofstream » бессмысленно. Файл содержит содержимое, поток-это дескриптор, который представляет запись в файл.

Либо сбросьте ofs и прочитайте файл, либо используйте std::ostream amp; вместо std::ofstream amp; .