为什么QByteArray从比新下载的QByteArray小的文件中读取?

时间:2015-07-09 15:49:22

标签: c++ qt qfile qbytearray

我正在尝试将已保存的html文件的QByteArray与刚刚下载的QByteArray进行比较。我必须将文件内容的QString转换为QByteArray才能比较它们(反之亦然),比较字节似乎是最干净的方法,但是从QString转换为{ {1}},新QByteArray的大小小于它应该的大小。 QByteArray表示如果未定义,则会抑制或替换字符。它还说它默认使用QByteArray QString::toLocal8Bit() const并尝试使用ASCII,因为这就是网站的编码方式。我仍然得到相同的结果。

toLatin1()

该函数的bool NewsBulletin::compareDownload(QByteArray new_contents, QString filename) { bool return_what = false; qDebug() << "I am in compareDownload"; // qDebug() << new_contents[1]; // qDebug() << new_contents[1] << endl // << new_contents[2]; QFile file(application_path + filename); if (file.exists()) { // QString new_contents_qstr(new_contents); file.open(QIODevice::ReadOnly | QIODevice::Text); QTextStream in(&file); QTextCodec::setCodecForLocale(QTextCodec::codecForName("ASCII")); QString file_contents = in.readAll(); QByteArray file_byte_array = file_contents.toLocal8Bit(); qDebug() << "outputting new file array"; qDebug() << new_contents[5] << new_contents.size(); qDebug() << "outputting old file array"; qDebug() << file_byte_array[5] << file_byte_array.size(); for (int i=0; i<=file_byte_array.size(); i++) { if (file_byte_array[i] != new_contents[i]) { return_what = true; break; } else if (i == file_byte_array.size()) { qDebug() << "compareDownload will return false, duplicate file."; return_what = false; } } } else { qDebug() << "compareDownload will return true, DNE."; return_what = true; } return return_what; } 输出为:

qDebug()

1 个答案:

答案 0 :(得分:0)

读完api几个小时后,我发现字节不同的原因。

file.open(QIODevice::ReadOnly | QIODevice::Text);

QIODevice::Text需要删除。此标志将行尾终止符更改为cpp的终结符,&#34; \ n&#34;,从而产生字节差异。