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

Alles rund um die Programmierung mit Qt
aed
Beiträge: 26
Registriert: 18. August 2011 13:50

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

Beitrag von aed »

Hallo zusammen

ich habe ein kleines Problem. Ich fange gerade erst an mit QT und C++.
Jetzt habe ich mir gleich ein ehrgeiziges Ziel gesetzt.

Auf einem FTP Server liegt eine Textdatei mit Highscores Verschiedener Spiele und Spieler z.B.
Spiel 1
Martin 100
Max 80
Peter 3
Spiel 2
Peter90
Max 50
Martin 30

Nun will ich diese Datei herunterladen, auslesen und eine Statistik machen.

Nur leider habe ich keine Ahnung wie ich anfangen soll. Ist es überhaupt möglich auf diesem Weg eine Datei vom FTP zu holen? Kann mir hier jemand helfen?

Danke schonmal im Vorraus
Zuletzt geändert von aed am 30. August 2011 14:24, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Textdatei von FTP holen und auslesen

Beitrag von Christian81 »

Doku zum QtNetwork-Modul lesen und mindestens zwei Möglichkeiten entdecken.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Textdatei von FTP holen und auslesen

Beitrag von franzf »

Der übliche Weg:
* Doku aufmachen (Qt Assistant)
* Dort nach Stichwort suchen, hier "FTP"
* Ergebnisse sichten, auswerten: Es gibt ein "FTP Example" hört sich gut an. Weiter unter gibts die Klasse "QFtp"
* Die Doku zu QFtp sagt "QFtp ist veraltet, besser sollte man QNetworkAccessManager
* Doku zu QNetworkAccessManager öffnen, die Beispiele lesen und daran seinen eigenen Code ausrichten.

Nur, falls du in Zukunft wieder vor einer ähnlichen Frage stehst - die Doku weiß (fast) alles.

Jetzt versuch erstmal selbständig ein wenig rum, wenn du hängst kannst du hier ja weiter fragen :)
aed
Beiträge: 26
Registriert: 18. August 2011 13:50

Re: Textdatei von FTP holen und auslesen

Beitrag von aed »

Ah, ich werd mich mal schlaumachen.

Danke
aed
Beiträge: 26
Registriert: 18. August 2011 13:50

Re: Textdatei von FTP holen und auslesen

Beitrag von aed »

Doppelpost ;-)
Zuletzt geändert von aed am 26. August 2011 11:47, insgesamt 1-mal geändert.
aed
Beiträge: 26
Registriert: 18. August 2011 13:50

Re: Textdatei von FTP holen und auslesen

Beitrag von aed »

Hallo zusammen,

es funktioniert soweit. Textdatei wird ausgelesen.
Jedoch habe ich mim FTP noch n kleines Problem.
Ich kann connecten und das file auch runterladen, allerdings ist es immer leer.

Wo liegt hier der Fehler? Ich glaube es fehlt das done() Signal nur hab ich ka wie ich das schreiben soll.

QFile *file = new QFile( "C:\\test.txt" );
QFtp *ftp = new QFtp();
void MainWindow::getftpdatei(void)
{
ftp->connectToHost("localhost");
ftp->login("test","test");

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

//Pause? Signal?

ftp->close();
file->close();
}


ich habs mal folgendermaßen versucht:
...
file->open(QIODevice::ReadWrite);
ftp->get("test.txt",file);
connect( this, SIGNAL(commandFinished(int,bool)), SLOT(on_commandFinished(int,bool)));
}
void MainWindow::on_commandFinished(void)
{
ftp->close();
file->close();
}
aber das funktioniert auch nicht
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Textdatei von FTP holen und auslesen

Beitrag von Christian81 »

QFtp ist ansynchron. Du muss vor dem close natürlich warten bzw QFtp fertig ist. Wird ja genau in der Detailed Description beschrieben.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
aed
Beiträge: 26
Registriert: 18. August 2011 13:50

Re: Textdatei von FTP holen und auslesen

Beitrag von aed »

Ja das hab ich auch gelesen nur ist mir nicht ganz klar wie genau ich das mach.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Textdatei von FTP holen und auslesen

Beitrag von Christian81 »

Signals und Slots verwedenen und wenn QFTp fertig meldet dann in deinem Slot die Datei schliessen bzw. alles ordentlich aufrufen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
aed
Beiträge: 26
Registriert: 18. August 2011 13:50

Re: Textdatei von FTP holen und auslesen

Beitrag von aed »

Jop, des hilft mir jetzt auch nicht weiter wenn ich nicht weis wie ichs umsetzen (programmieren) soll.

Funktioniert das so?
...
file->open(QIODevice::ReadWrite);
ftp->get("test.txt",file);
connect( this, SIGNAL(commandFinished(int,bool)), SLOT(on_commandFinished(int,bool)));
}
void MainWindow::on_commandFinished(void)
{
ftp->close();
file->close();
}
Bitte um Beispiele
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Textdatei von FTP holen und auslesen

Beitrag von franzf »

connection prinzipiell VOR einem Funktionsaufruf, der SIGNALS werfen kann (wird hier jetzt nicht wichtig sein, kann aber durchaus mal zu Problemen führen).
Dann sollte der sender schon korrekt angegeben werden.
-> Wer sendet? ftp und nicht this!
Und so etwas bekommt man mit, wenn man das Programm auf einer Konsole startet, da werden solche Warnings ausgegeben.
aed
Beiträge: 26
Registriert: 18. August 2011 13:50

Re: Textdatei von FTP holen und auslesen

Beitrag von aed »

Also dann quasi so oder?

QFile *file = new QFile( "C:\\test.txt" );
QFtp *ftp = new QFtp();
void MainWindow::on_commandFinished(void)
{
ftp->close();
file->close();
}

void MainWindow::getftpdatei(void)
{
ftp->connectToHost("localhost");
ftp->login("test","test");

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

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

Aber das funktioniert leider nicht. Die Datei ist weiterhin leer.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Textdatei von FTP holen und auslesen

Beitrag von franzf »

Dann sollte auch noch die beim connect angegebene Signatur des SLOTS mit der der tatsächlich implementierten Funktion übereinstimmen (sowas wird auch auf die Konsole geprintet).
TIP: In der Doku steht sicher, dass man beim SLOT die Parameter weg lassen/reduzieren kann.
aed
Beiträge: 26
Registriert: 18. August 2011 13:50

Re: Textdatei von FTP holen und auslesen

Beitrag von aed »

franzf hat geschrieben:Dann sollte auch noch die beim connect angegebene Signatur des SLOTS mit der der tatsächlich implementierten Funktion übereinstimmen
ja tut sie dass denn nicht? Hab ich mich vertippt?
wenn du glaubst das MainWindow fehlt:
connect( ftp, SIGNAL(commandFinished(int,bool)), SLOT(MainWindow::on_commandFinished(int,bool)));
ändert auch nichts. Jedoch markiert er das on_commandFinished auch wenn ichs reinschreib gleichzeitig mit dem in dem im Funktionskopf.
Zuletzt geändert von aed am 29. August 2011 07:45, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Textdatei von FTP holen und auslesen

Beitrag von Christian81 »

Slot:

Code: Alles auswählen

void MainWindow::on_commandFinished(void)
Connect:

Code: Alles auswählen

connect( ftp, SIGNAL(commandFinished(int,bool)), SLOT(on_commandFinished(int,bool)));
connect() gibt definitiv false zurück und auf der Konsole kommt eine Qt-Warnung...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten