我在读取联机文件时遇到一些问题。在将文件下载到临时文件后,我正在尝试读取文件中的内容。这是我的代码:
void MainWindow::fileIsReady( QNetworkReply * reply)
{
QTemporaryFile tmpFile;
tmpFile.write(reply->readAll());
QByteArray asdf = reply->readAll();
qDebug() (QString("%1").arg(asdf.length())); // returns 0
if (tmpFile.open())
{
qDebug << "attempting to read file";
QTextStream stream(&tmpFile);
QString value = stream.readAll();
qDebug << value; // value is returning nothing
}
else
{
qDebug() << "failed to open internet file";
}
}
// in MainWindow constructor (MainWindow::MainWindow)...
QNetworkAccessManager * manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(fileIsReady(QNetworkReply*)) );
manager->get(QNetworkRequest(QUrl("https://www.website.com/stuff/file.exe.md5")));
我将使用它来比较两个 md5 字符串。
最佳答案
您的代码中存在几个问题:
- 您需要在写入之前打开
tmpFile
。 reply->readAll()
只会返回一次数据。进一步调用将返回空数组。使用readAll
收到数据后,您有责任将其存储在变量中,以备日后需要时使用。- 将内容写入文件后,文件指针位于其末尾。您无法从中读取任何内容,因为那里没有数据。您可以使用
seek
将指针移动到文件的开头并读取其内容。 - 在向文件写入数据后立即读取文件是没有意义的。您可以直接在
QNetworkReply
上使用QTextStream
来从中读取文本。 (也许这只是为了调试,我不知道。) - 很难相信您需要创建一个临时文件来计算 md5。有更简单的方法可以做到这一点。
关于c++ - Qt 使用 QNetworkReply 获取网络请求,将数据下载到临时文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19412019/