我首先使用QFile和QTextStream读取文件,然后将未修改的读取内容写入同一个文件。以下是代码:
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();但是,这会转换下面给出的file.txt:
1
2
3
4
5转到
12345也就是说,在这个过程中,换行符被移除。为什么会发生这种情况?我怎样才能阻止它?
发布于 2015-11-30 12:19:43
传递给(**\r\n**)的QIODevice::Text标志告诉Qt到将Windows样式的行终止符QIODevice::Text转换为C++样式的终止符(**\n**).。您是在Windows中操作吗?您应该能够在输入和输出文件上的二进制编辑器中看到\r\n。
发布于 2017-06-14 07:59:50
官方文件说,关于QIODevice::Text in openMode。
阅读时,行尾终止符被翻译成'\n‘。写入时,行结束符被转换为本地编码,例如Win32的'\r\n‘.
它说,Win32,在Win64上工作时,Qt5.8我发现它的工作方式不同。使用QIODevice::Text在openMode中,QIODevice::readAll()删除所有'\r','\t'。
谈到\n,无论openMode使用什么,它们都被\r所取代。如果使用QIODevice::Text模式,则可能被删除。
发布于 2020-04-13 10:49:06
解决方案是不使用QFile::Text或QIODevice::Text,如果您正在阅读,只需使用QIODevice::ReadOnly,这样您还可以找出所使用的确切行尾并适当地处理它们。在使用QIODevice::Text打开时,Mac(CR)或'\r‘行出现了这个问题。
https://stackoverflow.com/questions/33997523
复制相似问题