QTextStream readAll()删除换行符

时间:2015-11-30 11:26:20

标签: qt qt5 qtcore

我正在使用onSendFinished()QFile来首先读取文件,然后将未修改的读取内容写回到同一文件中。这是代码:

QTextStream

但是,这会转换下面给出的 file.txt

QFile inFile("file.txt");
if(!inFile.open(QFile::ReadOnly | QFile::Text))
{
    qCritical() << "ERROR: Unable to open input file: " << "file.txt";
    exit(1);
}
QTextStream inStream(&inFile);
QString fileContents = inStream.readAll();
inFile.close();

QFile outFile("file.txt");
if(!outFile.open(QFile::WriteOnly | QFile::Text))
{
    qCritical() << "ERROR: Unable to open output file: " << "file.txt";
    exit(1);
}

QTextStream outSream(&outFile);
outSream << fileContents;
outFile.close();

1
2
3
4
5

即。在此过程中,新行将被删除。为什么会这样?我该如何预防?

3 个答案:

答案 0 :(得分:1)

传递给QIODevice::Text的{​​{1}}标志告诉open() 将Windows样式的行终结符(Qt)转换为C ++样式的终结符({{1} })即可。 您是否在 Windows 中运营?您应该能够在输入和输出文件的二进制编辑器中看到\r\n

答案 1 :(得分:1)

解决方案是不使用QFile :: Text或QIODevice :: Text,如果您正在阅读,则只需使用QIODevice :: ReadOnly,这样您就可以找出所使用的确切行尾并适当地处理它们。使用QIODevice :: Text打开时,Mac(CR)或'\ r'行结尾时遇到了这个问题。

答案 2 :(得分:0)

官方文档中说,在openMode中关于QIODevice::Text

  

阅读时,行尾终结符被翻译为&#39; \ n&#39;。写入时,行尾终结符被转换为本地编码,例如&#39; \ r \ n&#39;对于Win32。

它说Win32,在使用Win64时,Qt5.8我发现它的工作方式不同。 在openMode中QIODevice::TextQIODevice::readAll()删除所有'\r','\t'

谈论\n,无论openMode使用什么,它们都被\r取代。 如果使用QIODevice::Text模式,可能会被删除。