Mit QFtp rekursiv die Verzeichnisstruktur durchlaufen

Alles rund um die Programmierung mit Qt
Antworten
ChrisHC
Beiträge: 4
Registriert: 5. Januar 2011 20:04

Mit QFtp rekursiv die Verzeichnisstruktur durchlaufen

Beitrag 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
dazedly
Beiträge: 197
Registriert: 3. Oktober 2010 15:38
Kontaktdaten:

Beitrag von dazedly »

EDIT: Hätte richtig lesen sollen, sorry :)
Zuletzt geändert von dazedly am 6. Januar 2011 01:26, insgesamt 1-mal geändert.
ChrisHC
Beiträge: 4
Registriert: 5. Januar 2011 20:04

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich verstehe das Problem nicht. QFtp:list() aufrufen, auf das Signal listInfo() hören und auswerten.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
ChrisHC
Beiträge: 4
Registriert: 5. Januar 2011 20:04

Beitrag 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 :)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
ChrisHC
Beiträge: 4
Registriert: 5. Januar 2011 20:04

Beitrag von ChrisHC »

Hallo Christian,
vielen Dank, dann werd ich mir das mal genauer anschauen.

Ich berichte dann ob es geklappt hat.

Grüße,

Chris
Antworten