Witam, jak zrobić aby program czekał na pobranie pliku log.txt z serwera ftp i dopiero na nim działał. Bo na razie to program go otwiera bez czekania aż się pojawi.
Kod programu
#include "metin2_patcher.h"
#include "ui_metin2_patcher.h"
metin2_patcher::metin2_patcher(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::metin2_patcher)
{
ui->setupUi(this);
log = 0;
file = new QFile("E:/log.txt");
file->open(QIODevice::WriteOnly);
connect_ftp_serwer();
ftp->cd("Dreikonv2");
ftp->list();
ftp->get("log.txt", file);
disconnect_ftp_serwer();
file2 = new QFile("D:/config.exe");
file2->open(QIODevice::ReadOnly);
}
metin2_patcher::~metin2_patcher()
{
delete ui;
}
void metin2_patcher::connect_ftp_serwer()
{
ftp = new QFtp(this);
connect(ftp, SIGNAL(listInfo(QUrlInfo)), this, SLOT(readList(QUrlInfo)));
connect(ftp, SIGNAL(dataTransferProgress(qint64,qint64)), this, SLOT(dataProcess(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)), file, SLOT(deleteLater()));
ftp->connectToHost("ip", 21);
ftp->login("login", "haslo");
}
void metin2_patcher::disconnect_ftp_serwer()
{
ftp->close();
}
void metin2_patcher::readList(QUrlInfo urlInfo)
{
if(urlInfo.isDir())
qDebug() << "[FOLDER]" << " nazwa pliku : " << urlInfo.name() << " rozmiar pliku : " << urlInfo.size();
else if(urlInfo.isFile())
qDebug() << "[PLIK]" << " nazwa pliku : " << urlInfo.name() << " rozmiar pliku : " << urlInfo.size();
}
void metin2_patcher::dataProcess(qint64 act, qint64 size)
{
qDebug() << "Pobrano : " << act << " z : " << size;
}
void metin2_patcher::printStarted(int id)
{
qDebug() << "printStarted : " << id;
}
void metin2_patcher::printStatus(int status)
{
static const char* const p_status[] = {
"Unconnected",
"HostLookup",
"Connecting",
"Connected",
"LoggedIn",
"Closing",
"order"
};
qDebug() << p_status[qBound(0, status, 6)];
}
void metin2_patcher::printFinished(int id, bool error)
{
if(error)
qDebug() << "Failed : " << id << " error : " << ftp->error();
else
qDebug() << "printFinished Success : " << id;
if(id == 6)
crc16_sum(file2->read(524288));
}
void metin2_patcher::on_button_exit_clicked()
{
close();
}
void metin2_patcher::crc16_sum(QByteArray byte)
{
quint16 crcSum = qChecksum(byte.data(), byte.length());
qDebug() << "crcSum : " << hex << crcSum << " : " << dec << crcSum;
}
Zrobiłem tak ale wyskakuje rozmiar 0.
EventLoop = new QEventLoop();
connect(ftp, SIGNAL(commandFinished(int,bool)), EventLoop, SLOT(quit()));
ftp->get("log.txt", file);
EventLoop->exec();
delete EventLoop;
qDebug() << file->size();
Ps. Sorry, zamiast do tamtego postu dołączyć zrobiłem nowy. Niech moderator scali.