#c #stream
#c #поток
Вопрос:
Итак, что я делаю, это создаю stringstream в двоичном режиме. Где-то вдоль линии я больше не хочу рассматривать его как двоичный файл, а как обычный поток строк.
Просматривая документацию, единственный момент, когда потоки заботятся о том, являются ли они двоичными, входными или выходными (флаги ios_base:: openmode), находится в стадии разработки. Вы можете изменить флаги манипулятора и флаги ошибок, но, по-видимому, не флаги openmode? Может быть, я недостаточно внимательно смотрю?
Итак, что я сейчас делаю, это что-то вроде
std::stringstream memory( ios_base::in | ios_base::out | ios_base::binary );
boost::iostreams::copy( *source_file, memory );
И где-то по ходу дела я хотел бы иметь возможность сделать что-то вроде
memory.reset_openmode( ios_base::in | ios_base::out );
Комментарии:
1. Вам действительно нужен перевод новой строки? Особенно в потоках в памяти?
2. Это все , что делает двоичный флаг? Итак, вы говорите, что если я открою что-то в двоичном режиме, то позже, когда я захочу обработать это как текст, я смогу делать все
memory >> somestring
, что захочу, только если символ новой строки не будет прочитан должным образом
Ответ №1:
Что вы могли бы сделать (а также то, что я бы сделал), так это то, что я бы закрыл поток, затем снова открыл поток как базовый текстовый файл, установив флаги seekg() и seekp() по мере необходимости.
Комментарии:
1. Это поток строк, а не fstream, поэтому его нельзя закрыть. Я использую boosts copy для получения данных из пользовательского класса file_source, который обрабатывает zip-архив. Я мог бы отложить копирование до того момента, когда я узнаю, хочу ли я, чтобы поток был двоичным или символьным, но, возможно, позже у меня не будет такой роскоши, и я просто хочу знать, как с этим справиться.
2. В чем разница между строковым потоком и fsteream, я никогда не сталкивался с этим. Я знаю, что они оба могут использовать необработанный двоичный файл, и я знаю, что fstream можно изменить на поток ввода строки, а затем обратно, когда вам это нужно.
3. ну, во-первых, если я закрою fstream, он запишет все, что в нем есть, на диск. Я не хочу, чтобы что-либо записывалось на диск. Поскольку это означало бы, что мое приложение извлекает архивированные файлы на диск, а затем использует извлеченные файлы для их чтения! Не лучший способ сделать что-то.