Вставка конечной строки в поток строк - PullRequest
5 голосов
/ 29 июля 2011

Мы знаем, что при вставке \n в поток файла соответствующая последовательность конца строки для системы будет записана в файл (например, \r\n для Windows).Приводит ли вставка конца строки в std::stringstream к тому, что соответствующая системе последовательность конца строки записывается в строку?Например:

#include <sstream>

int main()
{
    std::ostringstream oss;
    oss << std::endl;
    std::string endlineSequence = oss.str();
    bool isWindows = enlineSequence == "\r\n";
    bool isOldMac  = endlineSequence == "\r";
    bool isUnix    = endlineSequence == "\n";
    // Will this work???
}

Ответы [ 2 ]

13 голосов
/ 29 июля 2011

Конечные строки, специфичные для системы, относятся только к текстовым файлам . Пока поток находится только в памяти, он просто '\n'.

3 голосов
/ 29 июля 2011

Короткий ответ : Нет .

Длинный ответ :

Поток файлов в текстовом режиме вставитПлатформа ELS в файл.Но приложение никогда не увидит этого, поскольку ELS преобразуется обратно в \n при чтении файла.Так что даже с файловым потоком (в текстовом режиме) вы никогда не увидите ELS.

Назад к std::stringstream.Если код вставил специфичный для платформы ELS (чего нет), то при чтении потока вы все равно ожидаете увидеть \n при обратном чтении, как и при ожидании преобразования ELS обратно.В этом нет особого смысла.

...