ファイルのチェックサムが必要ですが、それは完全に正常に動作するthisが見つかりました。今、私は次の行を前に開かれたQIODevice
へのポインタを取るために、この機能を変更したい:開いているQIODeviceのチェックサムを取得
if (!file.open(QFile::ReadOnly | QFile::Text))
{
...
}
これはデバイスとして(reader.read(&file);
)を読むために渡されます。
bool XmlReader::read(QIODevice* device)
{
QByteArray b = fileChecksum(device);
...
}
この私のfileChecksumの実装です。それはチェックサムを返しますが、私は永遠にループに巻き込まれており、私は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);
後EDIT
:
印刷と印刷と印刷を続けるwhickqDebug() << "Checksum: " << b.toHex();
...
パースエラーがある:ゴミですpremature end of document
。
これが役に立ちます。
正確なエラーテキストを投稿してください。また、どのループに巻き込まれているかはあまり明確ではありません。明確にしてください。 – demonplus
@tobilockerエラーは、この質問には含まれていないコードの部分です。 'addData'関数はファイル全体を読み込み、カーソルを"巻き戻さない "ので、' auto pos = device-> pos(); QByteArray b = fileChecksum(device ); device-> seek(pos); ' – PeterT
@PeterTそれはそれをしました!完璧!それらの行を答えとして追加するだけで、私はそれを受け入れることができます。 – tobilocker