QFTP mit USER:PW

Alles rund um die Programmierung mit Qt
Antworten
pfusterschmied
Beiträge: 91
Registriert: 14. Mai 2007 11:19
Wohnort: Salzburg
Kontaktdaten:

QFTP mit USER:PW

Beitrag von pfusterschmied »

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 »

Und was sagt der Debugger?
pfusterschmied
Beiträge: 91
Registriert: 14. Mai 2007 11:19
Wohnort: Salzburg
Kontaktdaten:

Beitrag von pfusterschmied »

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 »

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 »

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 »

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 »

Hab den Fehler gefunden!

Die Zeile :

Code: Alles auswählen

if (urlInfo.isReadable()) { .....
überprüft ob das File am Server gelesenwerden kann .... Alle Dateien waren jedoch nur chmod 770 freigegeben .....

Also kein Problem nur Dummheit ..... :roll:
Antworten