本身封裝的ftpCtrl類,測試正常下載文件。html
原文:默默地EEer
http://www.cnblogs.com/hebaichuanyeah/p/6083036.htmlios
ftpCtrl.h函數
#ifndef FTPCTRL_H #define FTPCTRL_H #include <QFile> #include <QFtp> class FtpCtrl : public QObject { Q_OBJECT public: FtpCtrl(QObject *parent = 0); bool getFile(QString path,QString name); void setHost(QString host,int port=21); int getDone(); signals: void done(); private slots: void ftpDone(bool error); private: QFtp ftp; QFile file; QString ftpHost; int ftpPort; int doneFlag; }; #endif
ftpCtrl.cpp測試
#include <QtCore> #include <QtNetwork> #include <iostream> #include "ftpCtrl.h" #include <QDebug> FtpCtrl::FtpCtrl(QObject *parent) : QObject(parent) { connect(&ftp, SIGNAL(done(bool)), this, SLOT(ftpDone(bool))); } bool FtpCtrl::getFile(QString path,QString name) { QDir temp; if(!temp.exists(path)) { temp.mkpath(path); } file.setFileName(path+"/"+name); if (!file.open(QIODevice::WriteOnly)) { qDebug() << "Error: Cannot write file "<< qPrintable(file.fileName()) << ": "<< qPrintable(file.errorString()); return false; } ftp.connectToHost(ftpHost, ftpPort); ftp.login(); doneFlag = 0; ftp.get(path+"/"+name, &file); ftp.close(); return true; } void FtpCtrl::setHost(QString host,int port) { ftpHost = host; ftpPort = port; } void FtpCtrl::ftpDone(bool error) { if (error) { doneFlag = -1; std::cerr << "Error: " << qPrintable(ftp.errorString()) << std::endl; } else { doneFlag = 1; std::cerr << "File downloaded as " << qPrintable(file.fileName()) << std::endl; } file.close(); emit done(); } int FtpCtrl::getDone() { return doneFlag; }
建立ftpCtrl對象,經過setHost函數指定ftp地址和端口(默認端口21)。this
FtpCtrl ftpCtrl; ftpCtrl.setHost("192.168.3.105");
調用getFile函數下載指定路徑文件。spa
if(!ftpCtrl.getFile(path,name)) return false;
調用getDone函數返回下載是否成功/完成。code
int FtpThread::waitForDone() { while(ftpCtrl.getDone()==0) { QThread::msleep(100); } if(ftpCtrl.getDone()>0) return true; else return false; }