Code: Alles auswählen
void ftp(){
this->progress= new QProgressDialog("Copying files...", "Abort Copy", 0, 100, this);
this->progress->setAutoReset(0);
//Abbruchbutton - Event wenn gedrückt
connect(progress, SIGNAL(canceled()), this, SLOT(abort()));
//File zum schreiben/lesen öffnen
file = new QFile( "C:\\Users\\Daffi\\Desktop\\test.txt" );
if(!file->open(QIODevice::ReadWrite))
{
//wenn nicht zu öffnen
//Todo
delete file;
return;
}
//Ftp bereistellen
this->ftpzeiger = new QFtp();
this->ftpzeiger->setTransferMode(QFtp::Active);
//Events für Ende und Datenübertragung
connect(ftpzeiger, SIGNAL(done(bool)), this, SLOT(ftp_ende()));
connect(ftpzeiger, SIGNAL(dataTransferProgress(qint64, qint64)), this, SLOT(ftp_progress(qint64,qint64)));
connect(ftpzeiger, SIGNAL(commandFinished(int,bool)),this, SLOT(ftp_CommandFinished(int,bool)));
connect(ftpzeiger, SIGNAL(commandStarted(int)),this, SLOT(ftp_CommandStarted(int)));
//Host
this->ftpzeiger->connectToHost("ftp.trolltech.com");
//Logindaten
this->ftpzeiger->login();
//Verzeichnis und File auswählen
this->ftpzeiger->cd("qt/add-ons");
this->ftpzeiger->get("qt-mobility-symbian-1.1.0-symbian3-nokia-signed.sis",file,QFtp::Binary);
//Event Schleife
this->progress->exec();
//Aufräumen
//this->progress=NULL; -> später machen, sonst exception
//this->ftpzeiger->close();
//this->ftpzeiger=NULL;
//this->file->close();
//this->file=NULL;
return;
}
void ftp_ende(){
if(ftpzeiger->error()==0){
ui.textEdit->append("INSTALL erfolgreich heruntergeladen!");
this->progress->setValue(this->progress->maximum());
}
else{
ui.textEdit->append("Beim Download trat ein Fehler auf!");
this->progress->close();
return;
}
}
void ftp_progress(qint64 done,qint64 total){
this->progress->setMaximum(total);
this->progress->setValue(done);
}
void ftp_CommandFinished(int, bool error){
if (ftpzeiger->currentCommand() == QFtp::ConnectToHost) {
ui.textEdit->append("Verbindung zum Host aufgebaut...");
if (error){
ui.textEdit->append(ftpzeiger->errorString());
return;
}
}
if (ftpzeiger->currentCommand() == QFtp::Login){
ui.textEdit->append("Logindaten ueberprüft...");
if (error) {
ui.textEdit->append(ftpzeiger->errorString());
//ui.textEdit->append("Logindaten Fehlerhaft...");
return;
}
}
if (ftpzeiger->currentCommand() == QFtp::Get) {
ui.textEdit->append("Datenuebertragung beendet...");
if (error) {
ui.textEdit->append(ftpzeiger->errorString());
file->close();
file->remove();
return;
}
}
}
void ftp_CommandStarted(int id){
if (ftpzeiger->currentCommand() == QFtp::ConnectToHost)
ui.textEdit->append("Verbindung zum Host wird aufgebaut...");
if (ftpzeiger->currentCommand() == QFtp::Login)
ui.textEdit->append("Logindaten werden ueberprüft...");
if (ftpzeiger->currentCommand() == QFtp::Get)
ui.textEdit->append("Datenuebertragung gestartet...");
}
So das ist meine neuer Code...
Geht auch ohne Probleme bis auf 3 Stellen...
1. Es passiert nichts wenn ich auf abbrechen klicke... (obwohl Slot eigentlich gesetzt ist)
2. Wenn der Pfad falsch ist wie fange ich das ab?
3. Es geht ums aufräumen nach getaner Arbeit...
Der Block :
//this->progress=NULL; -> später machen, sonst exception
//this->ftpzeiger->close();
//this->ftpzeiger=NULL;
//this->file->close();
//this->file=NULL;
führt immer zu exceptions...
Wie räume ich mit den zeigern am Ende richtig auf und wenn ihr noch hinweise habt (grade auch in der commandfinished Funktion) nur her damit!
Danke Daffi