Seite 1 von 1

Problem mit den Rückantworten bei QFtp

Verfasst: 29. März 2007 19:48
von SuperSonik
Hi Leute,
ich habe ein Problem mit QFtp.
Mein Programm soll eine Datei per FTP auf einen Server schieben.
Da die Datei lokal immer gleich heißt mache ich vor dem hochladen
ein list() und schaue wie die Dateien heißen die schon im Ftp-Eingang liegen.
Leider funktioniert das list() nicht.
Ich habe mit einem Netzwerktool herausgefunden, dass da niemals eine
Antwort auf mein list kommt.
Mit Filezilla ist der ausgehende Port 21 und der eingehende Port 20.
Bei meinem Tool geht auf 21 was raus, aber kein Port wird von außen angesprochen.
Hier mal FTP spezifische Code:

Code: Alles auswählen

	void upload(void){
	

	
	QFile *upload_datei = new QFile(lineEdit_dateiname->text()+".txt");
	
	if(upload_datei->size() > 0){
	 ftp = new QFtp(this);
     connect(ftp, SIGNAL(commandFinished(int, bool)),
             this, SLOT(ftpCommandFinished(int, bool)));
     connect(ftp, SIGNAL(listInfo(const QUrlInfo &)),
             this, SLOT(addToList(const QUrlInfo &)));
     connect(ftp, SIGNAL(dataTransferProgress(qint64, qint64)),
             this, SLOT(updateDataTransferProgress(qint64, qint64)));
     connect(ftp, SIGNAL(done( bool )),
             this, SLOT(loeschen( bool )));

	 ftp->setTransferMode(QFtp::Active);
     ftp->connectToHost(lineEdit_ipftpserver->text(),21);
     ftp->login(lineEdit_ftpbeutzername->text(),lineEdit_ftppasswort->text());
     ftp->list();
	 
     
     pushButton_abfragen->setEnabled(false);
     pushButton_upload->setEnabled(false);
     pushButton_beenden->setEnabled(false);
     pushButton_upload->setText(tr("Uploading...."));
	}
	else{
		QMessageBox::information(this, tr("FTP"),
                                      tr("<h2>Keine Daten zum Upload vorhanden!</h2>")
                                      .arg(lineEdit_ipftpserver->text()));
	}
	
	upload_datei->close();	
	delete upload_datei;
	}//upload
	
	void ftpCommandFinished(int, bool error)
 	{
 	
 	QFile *upload_datei = new QFile(lineEdit_dateiname->text()+".txt");
 	
 	if(!upload_datei->exists()){
 		QMessageBox::information(this, tr("FTP"),
                                      tr("<h2>Die Datei konnte nicht gefunden werden</h2>Bitte kontrollieren Sie die Angabe für den Dateinamen. <br> Eventuell ist die Datei bereits hochgeladen, fragen Sie in diesem Fall die Daten erneut ab.")
                                      .arg(lineEdit_ipftpserver->text()));
     pushButton_abfragen->setEnabled(true);
     pushButton_upload->setEnabled(true);
     pushButton_beenden->setEnabled(true);
     pushButton_upload->setText(tr("Upload"));
 	}
 	
 	
 	 if (ftp->currentCommand() == QFtp::ConnectToHost) {
         if (error) {
             QMessageBox::information(this, tr("FTP"),
                                      tr("<h2>Die Verbingung zum Server konnte nicht hergestellt werden!</h2>Bitte kontrollieren Sie Ihre Einstellungen, und stellen Sie die Verbindung zum Internet sicher.")
                                      .arg(lineEdit_ipftpserver->text()));
            pushButton_abfragen->setEnabled(true);
     		pushButton_upload->setEnabled(true);
     		pushButton_beenden->setEnabled(true);
     		pushButton_upload->setText(tr("Upload"));
             
             return;
         }

     }
	if (ftp->currentCommand() == QFtp::Login) {
		 if (error) {
             QMessageBox::information(this, tr("FTP"),
                                      tr("<h2>Der Login ist fehlgeschlagen!</h2>Bitte kontrollieren Sie Ihren Benutzernamen und Passwort.")
                                      .arg(lineEdit_ipftpserver->text()));
            pushButton_abfragen->setEnabled(true);
     		pushButton_upload->setEnabled(true);
     		pushButton_beenden->setEnabled(true);
     		pushButton_upload->setText(tr("Upload"));
             
             return;
         }
	}
	if (ftp->currentCommand() == QFtp::List) {
               
               
              if(zaehler == 0){                        
             	ftp->put(upload_datei,lineEdit_dateiname->text()+".txt",QFtp::Ascii);
              }
              else{
              	QString zahl;
              	bool gefunden = false;
              	QString dateiname;
              	for(int i=1;i<=(zaehler+1);i++){
              		zahl.setNum(i);
              		dateiname = (lineEdit_dateiname->text()+zahl+".txt");
              		for(int j=0; j<dateinamen.count(); j++){
              			if(dateinamen[j] == dateiname){
              				gefunden = true;
              				break;           //aus innerer Schleife herausspringen, da gefunden
              			}
              		}
              		if(gefunden == true){
              			gefunden = false;
              		}
              		else{
              			break;  //aus aussen Schleife herausspringen, da name nicht gefunden
              		}
              		
              	}
              	

              	ftp->put(upload_datei,dateiname,QFtp::Ascii);
              	dateinamen.clear();
              	
              }	
            

     }
    if (ftp->currentCommand() == QFtp::Put) {
    	
      (ftp->currentDevice())->close();          
      ftp->close();
      
      }
      
     if (ftp->currentCommand() == QFtp::Close) {
     	

 
     }
    
 	}//ftpCommandFinished
 	
 	void addToList(const QUrlInfo &urlInfo)
 	{
 		dateinamen << urlInfo.name();
 		zaehler =zaehler+1;
 	}//addToList
 	
 	void updateDataTransferProgress(qint64 readBytes, qint64 totalBytes)
 	{
 	progressBar->show();
 	progressBar->setMinimum(0);
 	progressBar->setMaximum(totalBytes);
 	progressBar->setValue(readBytes);
 	if(readBytes == totalBytes)
 	{
 	progressBar->hide();	
 	}
 	}//updateDataTransferProgress

void loeschen( bool error ) {
	
 
	if(QFile::remove(lineEdit_dateiname->text()+".txt"))
	{
		
			
		  
 	      QMessageBox::information(this, tr("FTP"),
  	                                   bla
                                      );
	}
 	pushButton_abfragen->setEnabled(true);
 	pushButton_beenden->setEnabled(true);
    pushButton_upload->setEnabled(true);
    pushButton_upload->setText(tr("Upload"));
	
}  
Hat jemand eine Ahnung was ich falsch mache?
Gruß,
SuperSonik