环境:
macOS Mojave 10.14.1
Qt 5.11.2

QT安装Ftp模块

QFtp在最新版本的QT中已经被移除了,现在推荐的是QNetworkAccessManager。
不过,我始终无法用QNetworkAccessManager来列出Ftp server中的文件夹文件列表。
在帮助文档和StackOverflow上都没有找到一个好的解决方案。
同时,我看的教程《Foundations Of Qt Development》上讲的网络部分FTP client使用了QFtp。
故,我build了qtftp模块,再为QT安装上。
相关网址:https://codereview.qt-project.org/#/admin/projects/qt/qtftp

git clone https://codereview.qt-project.org/qt/qtftp
qmake
make
sudo make install

接着,在pro文件中设置:QT += network ftp
QUrlInfo,QFtp等类QT便认识了。
教程中的FTP client例子:https://github.com/theArcticOcean/qtLib/tree/master/FTPClient

QNetworkAccessManager 模拟FTP文件下载

#include <QCoreApplication>
#include <QObject>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QNetworkAccessManager>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QNetworkRequest request;
    QUrl urlObj;
    urlObj.setScheme( "ftp" );
    urlObj.setHost( "123.57.149.197" );    //阿里云 万网
    urlObj.setPort( 21 );
    urlObj.setPath( "htdocs/index.php" );
    urlObj.setUserName( "****" );
    urlObj.setPassword( "****" );

    request.setUrl( urlObj );
    QNetworkAccessManager manager;
    manager.setNetworkAccessible(QNetworkAccessManager::Accessible);
    QNetworkReply* repl = manager.get( QNetworkRequest(urlObj) );
    QObject::connect(repl, &QNetworkReply::readyRead, [repl]()->void{
         qDebug().noquote() << repl->readAll();
    });
    QObject::connect(repl, QOverload<QNetworkReply::NetworkError>::of(&QNetworkReply::error),[repl]()->void{
        qDebug().noquote() << "Error: " + repl->errorString();
    });
    return a.exec();
}




读到的数据可以通过写文件的方式存储起来。
类似的工程:https://github.com/theArcticOcean/enVocabulary

分类: C plus plus

发表评论

电子邮件地址不会被公开。 必填项已用*标注