无法在QT 4.8中存储从URL下载的文件

时间:2019-05-14 08:14:28

标签: c++ qt4.8 qfile qurl

我正在尝试在QT 4.8中使用url下载xml文件。这是我的代码:-

downloadurl::downloadurl(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    ui.setupUi(this);

    QNetworkAccessManager GetFileDownloadNetworkManager;
    QNetworkReply *GetFileDownloadNetworkReply;

    QObject::connect(&GetFileDownloadNetworkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(FileDownloadReplyReceived(QNetworkReply*)));
    QObject::connect(&GetFileDownloadNetworkManager, SIGNAL((QNetworkReply*)), this, SLOT(FileDownloadReplyReceived(QNetworkReply*)));

    QUrl url(QString("MyLinkToDownloadFile"));  
    QNetworkRequest reqpn(url);
    reqpn.setRawHeader("Content-Type", "text/xml");
    GetFileDownloadNetworkReply = GetFileDownloadNetworkManager.get(reqpn);
}

downloadurl::~downloadurl()
{

}

void downloadurl::FileDownloadReplyReceived(QNetworkReply *Reply)
{
    if(Reply->error() == QNetworkReply::NoError)
    {
        QFile DownloadedFile("/FlashDisk/ServerTemp/12012.xml");
        if (!DownloadedFile.open(QIODevice::WriteOnly))
        {
            messageBox.critical(0,"Error","Can't open File");
            return;
        }
        DownloadedFile.write(Reply->readAll());
        DownloadedFile.close();
    }
    Reply->deleteLater();
}

我的代码进入插槽,但在12012.txt中找不到创建的/FlashDisk/ServerTemp/。请说出我到底在想什么。

1 个答案:

答案 0 :(得分:0)

自己解决问题。我必须在QIODevice::Text中添加QFile.open权限。这是我的最终代码:-

downloadurl::downloadurl(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    ui.setupUi(this);

    QNetworkAccessManager GetFileDownloadNetworkManager;
    QNetworkReply *GetFileDownloadNetworkReply;

    QObject::connect(&GetFileDownloadNetworkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(FileDownloadReplyReceived(QNetworkReply*)));
    QObject::connect(&GetFileDownloadNetworkManager, SIGNAL((QNetworkReply*)), this, SLOT(FileDownloadReplyReceived(QNetworkReply*)));

    QUrl url(QString("MyLinkToDownloadFile"));  
    QNetworkRequest reqpn(url);
    reqpn.setRawHeader("Content-Type", "text/xml");
    GetFileDownloadNetworkReply = GetFileDownloadNetworkManager.get(reqpn);
}

downloadurl::~downloadurl()
{

}

void downloadurl::FileDownloadReplyReceived(QNetworkReply *Reply)
{
    if(Reply->error() == QNetworkReply::NoError)
    {
        QFile DownloadedFile("/FlashDisk/ServerTemp/12012.xml");
        if (!DownloadedFile.open(QIODevice::WriteOnly | QIODevice::Text))
        {
            messageBox.critical(0,"Error","Can't open File");
            return;
        }
        DownloadedFile.write(Reply->readAll());
        DownloadedFile.close();
    }
    Reply->deleteLater();
}