6

我们知道,当插入\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???
}
4

2 回答 2

15

系统特定的行尾仅与文本文件相关。只要流仅在内存中,它就是'\n'.

于 2011-07-28T20:44:08.563 回答
3

简短的回答

长答案

文本模式下的文件流会将特定于平台的 ELS 插入文件中。\n但是应用程序永远不会看到这一点,因为在读取文件时会将 ELS 转换回。因此,即使使用文件流(在文本模式下),您也永远不会看到 ELS。

回到std::stringstream. 如果代码确实插入了特定于平台的 ELS(它没有插入),那么当您读取流时,您仍然希望\n在读回它时看到,因为您希望 ELS 被转换回来。这样做没有什么意义。

于 2011-07-28T22:11:37.137 回答