Witam, mam napisany kod, którym łącze się z serwerem ftp, ale gdy chcę pobrać plik to tworzy się on na dysku ale pusty. Dodam jeszcze, że jak używam sygnału dataTransferProgress to pokazuje prawidłowo, że pobrano plik.
Tutaj macie to co wypisuje :
started 1
HostLookup
Connecting
Connected
Success 1
started 2
LoggedIn
Success 2
started 3
Success 3
started 4
Pobrano : 0 z 342
Pobrano : 342 z 342
Success 4
started 5
Closing
Unconnected
Success 5
A tutaj kod programu :
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QUrlInfo>
#include <QDebug>
#include <QFile>
#include <QFtp>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
void readList(QUrlInfo urlInfo);
void ile(qint64 akt, qint64 max);
void printStarted(int id);
void printFinished(int id, bool error);
void printStatus(int status);
private:
Ui::MainWindow *ui;
QFtp *ftp;
QFile *test;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
test = new QFile(QString("D:/plik.cfg"));
test->open(QIODevice::ReadWrite | QIODevice::Text);
ftp = new QFtp(this);
connect(ftp, SIGNAL(listInfo(QUrlInfo)), this, SLOT(readList(QUrlInfo)));
connect(ftp, SIGNAL(dataTransferProgress(qint64,qint64)), this, SLOT(ile(qint64, qint64)));
connect(ftp, SIGNAL(commandStarted(int)), this, SLOT(printStarted(int)));
connect(ftp, SIGNAL(commandFinished(int,bool)), this, SLOT(printFinished(int,bool)));
connect(ftp, SIGNAL(stateChanged(int)), this, SLOT(printStatus(int)));
connect(ftp, SIGNAL(done(bool)), ftp, SLOT(deleteLater()));
ftp->connectToHost("ip.net", 21);
ftp->login("login", "haslo");
ftp->cd("test");
ftp->get("plik.cfg", test);
ftp->close();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::readList(QUrlInfo urlInfo)
{
qDebug() << "Nazwa pliku : " << urlInfo.name() << " rozmiar pliku : " << urlInfo.size();
}
void MainWindow::on_pushButton_clicked()
{
}
void MainWindow::ile(qint64 akt, qint64 max)
{
qDebug() << "Pobrano : " << akt << " z " << max;
}
void MainWindow::printStarted(int id)
{
qDebug() << "started" << id;
}
void MainWindow::printFinished(int id, bool error)
{
QFtp *ftp = qobject_cast<QFtp*>(sender());
if (error) {
qDebug() << "Failed : " << id << " error : " << ftp->error();
} else {
qDebug() << "Success" << id;
}
}
void MainWindow::printStatus(int status)
{
static const char* const states[] = {
"Unconnected",
"HostLookup",
"Connecting",
"Connected",
"LoggedIn",
"Closing",
" --- uknown --- "
};
qDebug() << states[qBound(0, status, 6)];
}