不同的平台使用不同的行分隔符方案(LF,CR-LF,CR,NEL,Unicode LINE SEPARATOR等).C++(和C)运行时库通过转换'\n'为目标平台的本机新行编码,使大多数程序透明化.但是如果你的程序需要确定使用的实际字节序列,你怎么能这样做呢?
我提出的最好的方法是:
'\n',让运行时进行翻译.这感觉很糟糕.有没有办法在没有临时文件的情况下做到这一点?我尝试使用字符串流,但运行时实际上并没有'\n'在该上下文中转换(这是有道理的).运行时是否以其他方式公开此信息?
嗨,我想在字符串中保存多行。我有一个字符串日志字符串,我想保存多播错误日志,以后我可以将其打印在 txt 文件中或作为控制台输出。是否有可能使用 endl 来格式化字符串变量?我搜索了互联网,但我只找到
cout << "" << endl;
Run Code Online (Sandbox Code Playgroud)
现在我的想法是:
std::string logstring;
logstring = logstring + "Error Message" + "Number" + "Time + Date";
logstring += endl;
Run Code Online (Sandbox Code Playgroud)
这样的事情是可能的还是没有办法格式化字符串变量?后来我想将它们打印到 log.txt 文件中?是否可以使用这样的字符串?
std::ofstream logfile;
logfile.open(log.txt);
logfile << logstring;
Run Code Online (Sandbox Code Playgroud)
文本文件应如下所示
Error Message 1 Date
Error Message 2 Date
Error Message 3 Date
...
Run Code Online (Sandbox Code Playgroud)
有可能像这样得到它还是我必须单独打印所有行?
我正在使用一个基本std::ofstream对象,创建如下:
output_stream = std::ofstream(output_file.c_str());
Run Code Online (Sandbox Code Playgroud)
这将创建一个文件,其中放入一些信息.让我展示一个这样的消息示例:(观看窗口摘录)
full_Message "Error while processing message:\r\n\tForecast Request:"
Run Code Online (Sandbox Code Playgroud)
这一切都没问题,但在启动以下命令之后,出现了一个问题:
output_stream << full_Message;
output_stream.flush();
Run Code Online (Sandbox Code Playgroud)
为了查看错误,让我们看一下文件的十六进制转储:(这是文件的十六进制显示,如Notepad ++中所示.为清楚起见,我已截取屏幕截图.)
如您所见,角色0d加倍,导致以下显示:
Error while processing message:
Forecast Request:
Run Code Online (Sandbox Code Playgroud)
(换行线太多,两条线应该一个接一个地直接)
我知道在#13从UNIX/Linux到Windows进行文件转换时添加了字符,但这与此无关:我在Windows系统上纯粹使用Windows文件,因此不需要添加任何字符#13字符.
有没有人知道如何避免添加这个额外的角色?
提前致谢