Seite 1 von 2

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

Verfasst: 18. August 2011 14:41
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

Re: Textdatei von FTP holen und auslesen

Verfasst: 18. August 2011 14:53
von Christian81
Doku zum QtNetwork-Modul lesen und mindestens zwei Möglichkeiten entdecken.

Re: Textdatei von FTP holen und auslesen

Verfasst: 18. August 2011 15:00
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 :)

Re: Textdatei von FTP holen und auslesen

Verfasst: 18. August 2011 15:03
von aed
Ah, ich werd mich mal schlaumachen.

Danke

Re: Textdatei von FTP holen und auslesen

Verfasst: 26. August 2011 11:45
von aed
Doppelpost ;-)

Re: Textdatei von FTP holen und auslesen

Verfasst: 26. August 2011 11:46
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

Re: Textdatei von FTP holen und auslesen

Verfasst: 26. August 2011 12:33
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.

Re: Textdatei von FTP holen und auslesen

Verfasst: 26. August 2011 12:41
von aed
Ja das hab ich auch gelesen nur ist mir nicht ganz klar wie genau ich das mach.

Re: Textdatei von FTP holen und auslesen

Verfasst: 26. August 2011 13:08
von Christian81
Signals und Slots verwedenen und wenn QFTp fertig meldet dann in deinem Slot die Datei schliessen bzw. alles ordentlich aufrufen.

Re: Textdatei von FTP holen und auslesen

Verfasst: 26. August 2011 14:16
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

Re: Textdatei von FTP holen und auslesen

Verfasst: 26. August 2011 14:25
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.

Re: Textdatei von FTP holen und auslesen

Verfasst: 26. August 2011 15:25
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.

Re: Textdatei von FTP holen und auslesen

Verfasst: 26. August 2011 15:32
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.

Re: Textdatei von FTP holen und auslesen

Verfasst: 29. August 2011 07:37
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.

Re: Textdatei von FTP holen und auslesen

Verfasst: 29. August 2011 07:45
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...