Qt - 读取包含多个NULL字符的文件

时间:2017-07-12 12:25:32

标签: c++ qt file visual-studio-2017

我收到了一个文件,其中包含一行中的多个NULL字符/0。我的目标是加载文件并用其他东西替换/0,但我遇到了一些问题。

Qt在到达NULL字符的位置后停止读取文件。

代码:

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进行开发。

2 个答案:

答案 0 :(得分:3)

使用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);

答案 1 :(得分:2)

问题不是QFile停止阅读NUL(即'\0',而不是NULL宏),而是QTextStream认为NUL {1}}表示字符串结束,因此在遇到第一个append()后停止NUL

Here是另一个网站上的前一个帖子,讨论了一些非常相似的内容,并提出了一个建议的替代方案,其归结为:

在将NUL送入QTextStream之前,您需要将其替换为QDataStream,因为它不会通过它们。建议使用TextStream。也许您根本不需要Stream或任何NUL,并且可以将文件作为二进制文件读入内存,并在写入之前用您选择的替换替换StartDate再次出来。