由于某些原因,我的写入文本文件的函数突然停止工作了。
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 < 0SX = CR
myfile << "\r\n" << writethis;
它又起作用了。但是现在我很困惑。我正在使用linux编程,但是在使用filezilla将程序生成的文本文件从windows传输出来后进行阅读。这其中哪一部分导致文本文件中的行呈现为一行呢?
我非常确定 "endl" 在linux上可以正常工作,所以现在我认为是windows在使用filezilla传输文件之后搞乱了文件?打乱文本文件的写入和读取方式将导致我的程序崩溃,所以如果有人能够解释这个问题,我将不胜感激。
我也不记得我在程序中做了什么改变导致它不能工作,因为先前它一直很好用。我添加的唯一一件事就是线程。
编辑:
我尝试了将传输模式从ASCII /二进制切换(甚至删除了txt扩展名的强制ASCII),但没有任何区别。换行符在linux上出现,但在windows上没有出现。
多奇怪啊。
ofstream(filename, std::ios_base::app) << endl << writethis;
。这充分利用了 RAII。此外,您应该使用std::string
来表示文本项。 - Karl Knechtel