[英]Qt - Reading file containing multiple NULL characters
我得到了一个文件,该文件在一行中包含多个NULL特征/0
。 我的目标是加载文件并将/0
替换为其他文件,但这样做时遇到了一些问题。
在到达NULL字符的位置后,Qt停止读取文件。
码:
QTextStream fileContent;
QFile file(pendingFile);
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
fileContent.append(file.readAll());
}
文件:
Text
Text
Text /x00/x00/x00/x00/x00/x00/x00
More Text
我目前正在使用Qt 5.9.1并使用VS2017进行开发。
使用QDataStream读取文件
QFile file("raw.dat");
file.open(QIODevice::ReadOnly);
QDataStream fileStream(&file);
qint64 fileSize = file.size();
QByteArray data(fileSize, '\0');
fileStream.readRawData(data.data(), fileSize)
在ByteArray中,您可以替换所有\\ 0元素。
更新(评论,请看underscore_d的答案):
data.replace('\0','_');
QString dataString(data);
问题不在于QFile
在NUL
处停止读取(即'\\0'
,而不是NULL
宏),而是QTextStream
认为NUL
表示字符串结尾,因此在遇到第一个NUL
之后停止了append()
。
这是另一个站点上的上一个主题,讨论的内容非常相似,并带有建议的替代方法,其归结为:
您需要先将NUL
替换为QTextStream
,然后再将它们通过。 建议使用QDataStream
。 也许您根本不需要TextStream
或任何Stream
,并且可以将文件作为二进制文件读取到内存中,并在再次写入之前用您选择的替代项替换NUL
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.