Вы можете сделать то же самое в C ++:
std::ifstream reader( xmlInputStream.c_str() );
if ( !reader.is_open() ) {
// error handling here...
}
std::string xml;
std::string line;
while ( std::getline( reader, line ) ) {
xml += line + '\n';
}
Возможно, это не лучшее решение, но оно уже довольно хорошее.Вероятно, я бы написал что-то вроде:
std::string xml(
(std::istringstream_iterator<char>( reader )),
(std::istringstream_iterator<char>()) );
(обратите внимание, что необходим хотя бы один набор дополнительных скобок из-за аномалии в том, как C ++ будет анализировать оператор в противном случае.)
Или даже:
std::string
readCompleteFile( std::istream& source )
{
return std::string(
std::istringstream_iterator<char>( source ),
std::istringstream_iterator<char>() );
}
(Смотри, ма, без переменных :-)!) Оба эти решения сохраняют переводы строк в исходном файле, поэтому вам не нужно вставлять их обратно после прочтения.