[gelöst] ;-) Textdatei von FTP holen und auslesen

Alles rund um die Programmierung mit Qt
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Textdatei von FTP holen und auslesen

Beitrag von franzf »

Tut sie nicht:
Implementiert wird: on_commandFinished()
Im connect steht: on_commandFinished(int,bool)
Die passen nicht zusammen, der connect findet keinen passenden SLOT und teilt dir das auch auf der konsole mit.
Da SIGNAL und SLOT von den Parametern her nicht immer zusammen passen können/sollen/wollen, ist es möglich, SLOTs mit weniger Parametern als das Signal zu connecten. Folgende SLOTS könntest du nun auf das SIGNAL(commandFinished(int,bool)) connecten:
* on_commandFinished(int,bool)
* on_commandFinished(int)
* on_commandFinished()
Parameter werden von rechts her entfernt.
Ich denke du siehst, wie der connect jetzt ausschauen sollte :)
aed
Beiträge: 26
Registriert: 18. August 2011 13:50

Re: Textdatei von FTP holen und auslesen

Beitrag von aed »

Ah, ja natürlich. Ich kann ihm ja nicht mehr mitgeben was er nicht kennt.

dann müssts ja so heißen:
connect( ftp, SIGNAL(commandFinished(int,bool)), SLOT(MainWindow::on_commandFinished()));

Aber er gibt jetzt immer noch aus:
No matching signal for on_commandFinished()

Ich begreifs nicht.

PS. Ich dachte immer das er solche Warnungen in der Konsole direkt nach dem Debuggen rausgibt. Das das auch noch passiert während das Programm läuft war mir neu.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Textdatei von FTP holen und auslesen

Beitrag von franzf »

aed hat geschrieben:Aber er gibt jetzt immer noch aus:
No matching signal for on_commandFinished()
Kann es sein, dass du statt SLOT im connect SIGNAL geschrieben hast? Man kann nämlich auch SIGNAL auf SIGNAL connecten ;)
aed
Beiträge: 26
Registriert: 18. August 2011 13:50

Re: Textdatei von FTP holen und auslesen

Beitrag von aed »

Ne, ich habs genauso geschrieben wie oben angegeben.

connect( ftp, SIGNAL(commandFinished(int,bool)), SLOT(MainWindow::on_commandFinished()));

muss ich das vorher irgendwie speziell initialisieren?
Kann des daran liegen das ich das in der Mainwindow.cpp geschrieben hab?
Zuletzt geändert von aed am 29. August 2011 09:33, insgesamt 2-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Textdatei von FTP holen und auslesen

Beitrag von franzf »

Warum schreibst du jetzt MainWindow::on_commandFinished? Der Klassenspezifizierer gehört da nicht hin!
aed
Beiträge: 26
Registriert: 18. August 2011 13:50

Re: Textdatei von FTP holen und auslesen

Beitrag von aed »

Ohne ihn gibts Sigsegv
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Textdatei von FTP holen und auslesen

Beitrag von franzf »

Ohne komplettem Code gibts keine Hillfe ;)
(Dass jetzt was passiert, ist doch schon mal ein gutes Zeichen)
Ich kann mir zwar denken, was falsch läuft, aber bevor ich hier anfang groß zu labern, wäre ein wenig "Beweismaterial" nicht schlecht ;)
aed
Beiträge: 26
Registriert: 18. August 2011 13:50

Re: Textdatei von FTP holen und auslesen

Beitrag von aed »

Natürlich, gerne. Wenn du mir schon helfen willst stell ich dir alle Hilfsmittel zur Verfügung

Mainwindow.cpp:

QFile *file = new QFile( "C:\\test.txt" );
QFtp *ftp = new QFtp();

void MainWindow::getftpdatei(void)
{
connect ( ftp, SIGNAL(commandFinished(int,bool)), SLOT(on_commandFinished()));

ftp->connectToHost("localhost");
ftp->login("test","test");

file->open(QIODevice::ReadWrite);
ftp->get( "test.txt", file );

}
void MainWindow::on_commandFinished()
{
ftp->close();
file->close();
}

void MainWindow::on_pushButton_10_clicked() //GET FTP FILE
{
getftpdatei();

}
Ich hoffe des funktioniert jetzt dann mal, bin schon leicht am verzeiweln
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Textdatei von FTP holen und auslesen

Beitrag von franzf »

Das ftp->close ist an der Stelle nicht nötig (ftp->state() gibt eh schon Unconnected aus - ist also auch schon closed).
Dass das in dem Fall zu nem SegFault führt, ist nicht so gut :/
Das Beispiel in der Doku macht direkt nach dem get() ein close(). Das geht gut, weil close() hier nur ein neues QFtpCommand in die Queue einreiht und asynchron ausführt, solange der ftp noch aktiv ist.

Was aber an deinem Code ganz unsauber ist, sind die globalen Variablen. Das ist hier absolut unnötig, da es sich um Variablen handelt, die nur dein MainWindow interessieren. Daher wären die Teile als Member besser aufgehoben.
Faustregel: Prinzipiell auf globale Variablen verzichten. Wenn man meint man würde sie brauchen, gibt es recht wahrscheinlich doch eine bessere Lösung.
GLOBALE VARIABLEN SIND BÖÖÖÖSE! ;)
aed
Beiträge: 26
Registriert: 18. August 2011 13:50

Re: Textdatei von FTP holen und auslesen

Beitrag von aed »

Ja das Globale Variablen BÖÖÖÖSE sein sollen hab ich schon mal gehört. Habs nur mal zum Testen global gemacht damit der connect aufruf auch darauf zugreifen kann.

Jetzt kommt kein Speicherzugriffsfehler mehr, aber funktionieren tuts auch noch nicht :-(

Aber es muss am speichern liegen. Der Server läuft ja auf meinen PC und in der Konsole läuft auch alles
(000021)29.08.2011 11:36:20 - (not logged in) (127.0.0.1)> Connected, sending welcome message...
(000021)29.08.2011 11:36:20 - (not logged in) (127.0.0.1)> 220 BAUM
(000021)29.08.2011 11:36:20 - (not logged in) (127.0.0.1)> USER test
(000021)29.08.2011 11:36:20 - (not logged in) (127.0.0.1)> 331 Password required for test
(000021)29.08.2011 11:36:20 - (not logged in) (127.0.0.1)> PASS ****
(000021)29.08.2011 11:36:20 - test (127.0.0.1)> 230 Logged on
(000021)29.08.2011 11:36:20 - test (127.0.0.1)> SIZE test.txt
(000021)29.08.2011 11:36:20 - test (127.0.0.1)> 213 20
(000021)29.08.2011 11:36:20 - test (127.0.0.1)> TYPE I
(000021)29.08.2011 11:36:20 - test (127.0.0.1)> 200 Type set to I
(000021)29.08.2011 11:36:20 - test (127.0.0.1)> PASV
(000021)29.08.2011 11:36:20 - test (127.0.0.1)> 227 Entering Passive Mode (127,0,0,1,8,225)
(000021)29.08.2011 11:36:20 - test (127.0.0.1)> RETR test.txt
(000021)29.08.2011 11:36:20 - test (127.0.0.1)> 150 Connection accepted
(000021)29.08.2011 11:36:20 - test (127.0.0.1)> 226 Transfer OK
(000021)29.08.2011 11:36:20 - test (127.0.0.1)> QUIT
(000021)29.08.2011 11:36:20 - test (127.0.0.1)> 221 Goodbye
(000021)29.08.2011 11:36:20 - test (127.0.0.1)> disconnected.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Textdatei von FTP holen und auslesen

Beitrag von franzf »

Der Missetäter ist das falsche SIGNAL :/ Sry, dass ich das nicht gleich gesehen hab.
Ein command ist nicht ein einsames "get" sondern alles, was QFtp so treibt -login, cd, get, close, ... (Siehe QFtp::Command) Somit machst du bereits beim login dein file wieder zu. Jetzt ist auch klar, warum das ftp->close() im on_commandFinished() den SegFault ausgelöst hat ^^

Dein Signal der Wahl ist "done(bool)", dann sollte alles perfekt klappen:)
aed
Beiträge: 26
Registriert: 18. August 2011 13:50

Re: Textdatei von FTP holen und auslesen

Beitrag von aed »

Uii es geht. Jipieee. Danke.

Jetzt noch die böse globale Variable lokal machen, n paar Fehlerdiagnosen reinbaun und schon passt des.
Antworten