nat*_*tli 11 c c++ text newline
由于某种原因,我的写文本文件功能突然停止工作.
void write_data(char* filename, char* writethis)
{
ofstream myfile;
myfile.open (filename, std::ios_base::app);
myfile << endl << writethis;
myfile.close();
}
Run Code Online (Sandbox Code Playgroud)
该函数是从循环中调用的,所以基本上它以空行开始,并在新行上附加以下所有"writethis"行.
然后突然间,没有更多的新行.所有文本都附加在一行上.所以我做了一些挖掘,我遇到了这个:
所以我改行了
myfile << "\r\n" << writethis;
Run Code Online (Sandbox Code Playgroud)
它再次起作用.但现在我很困惑.我正在使用linux进行编码,但是在使用filezilla传输后,我正在阅读使用该程序在Windows上创建的文本文件.现在哪一部分导致文本文件中的行显示为一行?
我非常确定"endl"对linux工作得很好所以现在我认为windows 在使用filezilla传输文件后搞砸了文件?弄乱文本文件写入(和读出)的方式将保证我的程序中断,所以如果有人可以解释这一点,我会很感激.
我也不记得我在我的程序中改变了什么导致它破坏,因为它之前工作得很好.我添加的唯一内容是线程.
编辑:
我已经尝试从ASCII/Binary交换传输模式(甚至删除了force-ASCII-for-txt-extension),但它没有区别.换行符出现在linux中,但不出现在Windows上.

有多奇怪
ybu*_*ill 10
会发生什么情况是你编写Unix行结尾('\n'),然后将它传输到Windows机器获取一个按位相同的文件,然后尝试使用不理解Unix行结尾的查看器打开文件(可能是记事本) .
根据我编写可移植代码的经验:
'\n'在所有平台上标准化一行结束(,LF).是的,我确实认为每个人在一件事情上标准化而不是在任何地方支持所有这些事情都会带来更多好处.此外,我否认在适当的平台上存在"正确的行结尾".事实上,微软决定他们的原生API不会说UTF-8或者不理解Unix行结尾,这并不妨碍每个人的代码在Windows上做到这一点.请确保不要将此内容传递给WinAPI.很多时候,您对内部数据进行文本处理是系统无法看到的,那么为什么您需要通过满足这些系统内部的期望来使您的生活复杂化?
endl 不 "只是正常工作的Linux".流式endl传输一个\n字符并刷新流.总是.
但是,文本模式下的文件流会将其转换\n为\r\nWindows上的实现层,并且您经常会在平台之间传输文件时发现转换行结尾.
这可能不是C++问题,没有任何"破坏"; 您应该将FileZilla配置为将文件视为文本而不是" 二进制 "(一种不转换行结尾的模式).如果您的文件没有像".txt"这样的名称扩展名,那么默认情况下它可能不会这样做.
| 归档时间: |
|
| 查看次数: |
5087 次 |
| 最近记录: |