【发布时间】:2011-12-23 10:52:33
【问题描述】:
由于某种原因,我的写入文本文件功能突然停止工作。
void write_data(char* filename, char* writethis)
{
ofstream myfile;
myfile.open (filename, std::ios_base::app);
myfile << endl << writethis;
myfile.close();
}
该函数是从一个循环中调用的,所以基本上它以一个空行开始,并将所有以下“writethis”行附加到一个新行上。
然后突然之间,不再有换行符。所有文本都附加在一行上。所以我做了一些挖掘,我发现了这个:
- Windows = CR LF
- Linux = LF
- MAC
所以我把行改为
myfile << "\r\n" << writethis;
它又起作用了。但现在我很困惑。我在 linux 上进行编码,但在使用 filezilla 传输它们之后,我正在读取使用该程序创建的文本文件在 windows 上。现在是哪一部分导致文本文件中的行显示为一行?
我很确定“endl”在 linux 上工作得很好,所以现在我认为 windows 把文件弄乱了在用 filezilla 传输它们之后?弄乱文本文件的写入(和读出)方式将保证我的程序会中断,所以如果有人能解释这一点,我将不胜感激。
我也不记得我在我的程序中做了什么改变导致它中断,因为它之前工作得很好。我唯一添加的是线程。
编辑: 我曾尝试从 ASCII / Binary 交换传输模式(甚至删除了 force-ASCII-for-txt-extension),但没有区别。换行符出现在 linux 中,但不在 Windows 中。
多么奇怪。
【问题讨论】:
-
十亿个关于行尾的问题的重复。
-
@TomalakGeret'kal 那为什么我的搜索没有弹出?
-
因为你没有正确搜索?
-
为每一行输出重新打开和重新关闭文件效率低下。无论如何,函数体可以更简单地写成
ofstream(filename, std::ios_base::app) << endl << writethis;。这充分利用了 RAII。此外,您确实应该使用std::string来表示文本项。