首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QTextStream readAll()移除新行

QTextStream readAll()移除新行
EN

Stack Overflow用户
提问于 2015-11-30 11:26:19
回答 3查看 2.5K关注 0票数 1

我首先使用QFileQTextStream读取文件,然后将未修改的读取内容写入同一个文件。以下是代码:

代码语言:javascript
复制
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

代码语言:javascript
复制
1
2
3
4
5

转到

代码语言:javascript
复制
12345

也就是说,在这个过程中,换行符被移除。为什么会发生这种情况?我怎样才能阻止它?

EN

回答 3

Stack Overflow用户

发布于 2015-11-30 12:19:43

传递给(**\r\n**)的QIODevice::Text标志告诉Qt到将Windows样式的行终止符QIODevice::Text转换为C++样式的终止符(**\n**).。您是在Windows中操作吗?您应该能够在输入和输出文件上的二进制编辑器中看到\r\n

票数 2
EN

Stack Overflow用户

发布于 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模式,则可能被删除。

票数 1
EN

Stack Overflow用户

发布于 2020-04-13 10:49:06

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33997523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档