Alles rund um die Programmierung mit Qt
pfusterschmied
Beiträge: 91 Registriert: 14. Mai 2007 11:19
Wohnort: Salzburg
Kontaktdaten:
Beitrag
von pfusterschmied » 11. September 2007 08:59
Gute Morgen,
Ich möchte Dateien/Ordner von einem FTP Server herunterladen.
Zu Testzwecken verwende ich den lokalen FTP Server unter Linux. Wenn ich den FTP Server öffentlich mache klappt der Download. Wenn ich jedoch einen User und PW vergebe schließt sich das Programm ohne erkenntliche Fehlermeldung.
Ich habe auch schon versucht bewusst ein falsches PW einzugeben ... hier kommt es zu einem QFtp.error(): Login incorrect!
Ich verwende folgenden Code:
Code: Alles auswählen
ftp.connectToHost(url.host(), url.port(21));
QString user = "xxxxx";
QString pw = "xxxxx";
ftp.login(user, pw);
// ftp.rawCommand( "PWD" );
// ftp.list();
Kann mir jemand weiterhelfen
upsala
Beiträge: 3946 Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:
Beitrag
von upsala » 11. September 2007 09:05
Und was sagt der Debugger?
pfusterschmied
Beiträge: 91 Registriert: 14. Mai 2007 11:19
Wohnort: Salzburg
Kontaktdaten:
Beitrag
von pfusterschmied » 11. September 2007 09:08
Das Programm wird vollständig compiliert ohne Fehler,
anschließend startet das Programm ....
wenn die Verbindung zum FTP Server aufgebaut werden soll bricht das Programm ab mit der Meldung:
*** Exited normally ***
pfusterschmied
Beiträge: 91 Registriert: 14. Mai 2007 11:19
Wohnort: Salzburg
Kontaktdaten:
Beitrag
von pfusterschmied » 11. September 2007 09:19
Ich habe mir nun mal die logs vom ftp Server angesehen und festgestellt, dass das Login erfolgreich war. Aus irgendeinen Grund bricht QT die Verbindung ab.
Hat jemand eine Lösung?
Deever
Beiträge: 90 Registriert: 9. Mai 2007 18:20
Beitrag
von Deever » 11. September 2007 09:29
pfusterschmied hat geschrieben: Aus irgendeinen Grund bricht QT die Verbindung ab.
Vermutlich, weil das Programm fertig ist? "Exited normally" läßt jedenfalls darauf schließen?
HTH && Gruß,
/dev
pfusterschmied
Beiträge: 91 Registriert: 14. Mai 2007 11:19
Wohnort: Salzburg
Kontaktdaten:
Beitrag
von pfusterschmied » 11. September 2007 10:02
Hatte ich zuerst auch gedacht!
Aber ich möchte von FTP Server eine Ordnerstruktur in ein Lokales Verzeichnis kopiere. Das Verzeichnis (downloads) wird zwar erfolgreich erstellt (auch die unterstruktur der Ordner), jedoch werden keine Dateien kopiert.
Hier mein Code [ist aus Summerfield C++ GUI Programming with QT 4 entnommen]:
Code: Alles auswählen
#include <QtCore>
#include <QtNetwork>
#include <iostream>
#include "spider.h"
using namespace std;
Spider::Spider(QObject *parent)
: QObject(parent)
{
connect(&ftp, SIGNAL(done(bool)), this, SLOT(ftpDone(bool)));
connect(&ftp, SIGNAL(listInfo(const QUrlInfo &)),
this, SLOT(ftpListInfo(const QUrlInfo &)));
}
bool Spider::getDirectory(const QUrl &url)
{
if (!url.isValid()) {
cerr << "Error: Invalid URL" << endl;
return false;
}
// if (url.scheme() != "ftp") {
// cerr << "Error: URL must start with 'ftp:'" << endl;
// return false;
// }
if ( ftp.state() != QFtp::Unconnected )
ftp.close();
ftp.connectToHost(url.host(), url.port(21));
QString user = "****";
QString pw = "*****";
ftp.login(user, pw);
QString path = url.path();
if (path.isEmpty())
path = "/";
pendingDirs.append(path);
processNextDirectory();
return true;
}
void Spider::ftpDone(bool error)
{
if (error) {
cerr << "Error: " << qPrintable(ftp.errorString()) << endl;
} else {
cout << "Downloaded " << qPrintable(currentDir) << " to "
<< qPrintable(QDir::convertSeparators(
QDir(currentLocalDir).canonicalPath()));
}
qDeleteAll(openedFiles);
openedFiles.clear();
processNextDirectory();
}
void Spider::ftpListInfo(const QUrlInfo &urlInfo)
{
if (urlInfo.isFile()) {
if (urlInfo.isReadable()) {
QFile *file = new QFile(currentLocalDir + "/"
+ urlInfo.name());
if (!file->open(QIODevice::WriteOnly)) {
cerr << "Warning: Cannot open file "
<< qPrintable(
QDir::convertSeparators(file->fileName()))
<< endl;
return;
}
ftp.get(urlInfo.name(), file);
openedFiles.append(file);
}
} else if (urlInfo.isDir() && !urlInfo.isSymLink()) {
pendingDirs.append(currentDir + "/" + urlInfo.name());
}
}
void Spider::processNextDirectory()
{
if (!pendingDirs.isEmpty()) {
currentDir = pendingDirs.takeFirst();
currentLocalDir = "downloads/" + currentDir;
QDir(".").mkpath(currentLocalDir);
ftp.cd(currentDir);
ftp.list();
} else {
emit done();
}
}
pfusterschmied
Beiträge: 91 Registriert: 14. Mai 2007 11:19
Wohnort: Salzburg
Kontaktdaten:
Beitrag
von pfusterschmied » 11. September 2007 10:29
Hab den Fehler gefunden!
Die Zeile :
überprüft ob das File am Server gelesenwerden kann .... Alle Dateien waren jedoch nur chmod 770 freigegeben .....
Also kein Problem nur Dummheit .....