2013-10-27 137 views
0

在我的項目中,我需要下載一個簡單的.txt文件。我創建了一個功能來下載基於URL中的文件:Qt無法使用QNetworkAccessManager下載文件

void MainWindow::downloadFile(const QString &url, const QString &aPathInClient) 
{ 
    QNetworkAccessManager* m_NetworkMngr = new QNetworkAccessManager(this); 
    QNetworkReply *reply = m_NetworkMngr->get(QNetworkRequest(QUrl(url))); 
    QEventLoop loop; 
    connect(reply, SIGNAL(finished()), &loop, SLOT(quit())); 
    loop.exec(); 
    QUrl aUrl(url); 
    QFileInfo fileInfo=aUrl.path(); 

    QFile file(aPathInClient+"\\"+fileInfo.fileName()); 
    file.open(QIODevice::WriteOnly); 
    file.write(reply->readAll()); 
    delete reply; 
} 

當我的程序運行,該文件是用正確的文件名創建的,但該文件是空的。如果連接到網頁,則只能通過我的程序獲取文件名。我忘了什麼?我沒有得到構建錯誤,幷包含了所有必要的庫。

謝謝:)

編輯:

一切都很好,我的問題是我的鏈接中使用HTTPS而不是HTTP。

+0

嘗試寫一個已知的字符串常量,而不是reply-> readAll() –

+0

我從來沒有使用字符串文字。有沒有可能得到一個快速的例子? – mrg95

+1

首先檢查是否存在實際下載的數據:檢查readAll()返回的內容(將其存儲在QByteArray中並使用調試器或使用toHex()打印)並檢查reply-> errorString()。 –

回答

0

我還沒有使用'寫'功能寫入QFile。請嘗試以下方法:

QFile file(aPathInClient+"\\"+fileInfo.fileName()); 
file.open(QIODevice::WriteOnly); 
QTextStream out(&file); 
out << "This file is generated by Qt\n"; 

編輯:以上只是檢查文件是否被寫入正確與否。現在既然已經驗證,你可以嘗試:

out << reply->readAll(); 
+0

我現在正在測試它,但我好奇它是如何知道從回覆中獲取文件? – mrg95

+0

所有寫的都是「這個文件是由Qt生成的」 – mrg95

+0

查看我更新的答案。 –