【发布时间】:2016-11-14 07:33:13
【问题描述】:
我需要一个文件的校验和并找到this,它工作得很好。现在我想更改此函数以获取指向之前已打开的QIODevice 的指针,其中包含以下几行:
if (!file.open(QFile::ReadOnly | QFile::Text))
{
...
}
这被传递以读取 (reader.read(&file);) 作为设备:
bool XmlReader::read(QIODevice* device)
{
QByteArray b = fileChecksum(device);
...
}
这是我对文件校验和的实现。它返回一个校验和,但我永远陷入循环并且我收到一个 xml 解析错误。我在这里做错了什么?
QByteArray XmlReader::fileChecksum(QIODevice* device)
{
if (device->isOpen())
{
QCryptographicHash hash(QCryptographicHash::Sha256);
if (hash.addData(device)) {
return hash.result();
}
}
return QByteArray();
}
编辑
在QByteArray b = fileChecksum(device); 之后我愿意:
qDebug() << "Checksum: " << b.toHex();
whick 一直在打印,打印和打印......
解析错误是:premature end of document 这是垃圾。
希望这会有所帮助。
【问题讨论】:
-
能否请您发布确切的错误文本?另外,您在哪个循环中被抓到也不是很清楚,请您澄清一下吗?
-
@tobilocker 错误出现在此问题中未包含的代码部分中。您应该知道
addData函数很可能会读取整个文件,然后不会“倒回”光标,因此您可能想要执行auto pos = device->pos();QByteArray b = fileChecksum(device);device->seek(pos); -
@PeterT 做到了!完美的!如果您只是添加这些行作为答案,我可以接受。