Seite 1 von 1

Mit QFtp rekursiv die Verzeichnisstruktur durchlaufen

Verfasst: 5. Januar 2011 23:37
von ChrisHC
Hallo Zusammen,

ich bin gerade dabei mich in PyQT4 einzuarbeiten
und entwickle eine kleine Applikation zum downloaden von einem FTP
(vereinfacht dargestellt).

Trotz das ich in PyQT4 entwickle ist mein Problem eher Design-technischer Natur als ein konkretes Implementierunsproblem.

Als Grundgerüst habe ich das mitgelieferte FTP-Client Beispiel genommen
und möchte diesem jetzt eine Funktion hinzufügen mit
der ich ganze Verzeichnisse mit allem Inhalt downloaden kann.

Dazu habe ich eine rekursive Funktion geschrieben
die ausgehend eines Verzeichnisses alle Unterverzeichnisse durchläuft
und alle Dateien einer Liste zum downloaden hinzufügt.
Das klappt zum testen lokal, mit normalen Dateien und Verzeichnissen, auch wunderbar.

Nun wollte ich den Code auf QT übertragen und habe dann festgestellt
das ftp.list() seine Ergebnisse als Signal listInfo sendet.

Ein einfaches:

Code: Alles auswählen

fileList = ftp.list()
funktioniert leider nicht.

Als Slot dient in dem Beispiel-Tool die Funktion addToList(), welche
den Inhalt in einem QTreeWidget() ausgibt.

Nun könnte ich einfach einen zweiten Slot hinzufügen (downloadDir() z.b.)
und mit diesem arbeiten, mir ist jedoch schleierhaft wie ich so mit
einer rekursiven Funktion arbeiten soll, denn diese ruft sich ja immer selbst auf.

Weiterhin soll der Download per Button gestartet werden.
Wie unterscheide ich ob man einfach nur ein Verzeichniss wechselt (neues Verzeichniss muss ja auch ausgelesen werden, wieder listInfo()) oder etwas downloaden will? Als Sender gibt er ein QFtp-Objekt an.


Wie Ihr seht bin ich mit QT noch nicht sonderlich vertraut und mir fehlt einfach eine Anstoß wie man das umsetzen könnte.


Bin für jede Hilfe dankbar!

Grüße,

Chris

Verfasst: 6. Januar 2011 00:09
von dazedly
EDIT: Hätte richtig lesen sollen, sorry :)

Verfasst: 6. Januar 2011 00:55
von ChrisHC
Genau das macht meine Funktion ja, nacheinander alles abklappern.
Das Problem ist nicht das durchlaufen der ganzen Verzeichnisse sondern
wie ich mit den Werten umgeh bzw. überhaupt problemlos,
am besten nicht über den listInfo-Slot-Mechanismus rankomm.

Da fällt mir leider absolut nichts ein.

Verfasst: 6. Januar 2011 09:48
von Christian81
Ich verstehe das Problem nicht. QFtp:list() aufrufen, auf das Signal listInfo() hören und auswerten.

Verfasst: 6. Januar 2011 12:59
von ChrisHC
Das erste Problem ist das ich über keinerlei Info verfüge wer das Signal listInfo() ausgelöst hat:

1. ein einfacher Verzeichnisswechsel auf dem FTP, ausgelöst durch den Benutzer wenn er den FTP browst

oder

2. ausgelöst über einen Button "Download" der die rekursive Funktion ausruft, alles abläuft und die Dateien einer Liste hinzufügt.

Wie unterscheide ich wer listInfo() ausgelöst hat?
Als Sender erhalte ich nur ein QFtp-Objekt, damit kann ich keine Unterscheidung machen.

Das ist mein gravierendstes Problem.

Das nächste Problem ist wie ich meine Funktion integriere, aber das ist zweitrangig.
Salamitaktik: eins nach dem anderen :)

Verfasst: 6. Januar 2011 13:18
von Christian81
Da Du beides initiierst und es die Kommandos außerdem synchron nacheinander aufgerufen werden sollte das gehen - musst Dir es eben nur merken. Eine weitere Hilfe sind commandFinished() und commandStarted() - damit bekommst Du heraus welches Kommando gerade verarbeitet wird.

Verfasst: 6. Januar 2011 17:35
von ChrisHC
Hallo Christian,
vielen Dank, dann werd ich mir das mal genauer anschauen.

Ich berichte dann ob es geklappt hat.

Grüße,

Chris