我正在使用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
即。在此过程中,新行将被删除。为什么会这样?我该如何预防?
答案 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::Text
,QIODevice::readAll()
删除所有'\r','\t'
。
谈论\n
,无论openMode使用什么,它们都被\r
取代。
如果使用QIODevice::Text
模式,可能会被删除。