Seite 1 von 2
Rekursives Löschen leerer Verzeichnisse auf einem FTP-Server
Verfasst: 09.02.2012 17:02
von Amor_2001
Ich bin auf der Suche nach einem Code mit dem ich mich an einem FTP-Server anmelden kann, und anschließend ab einem Startdirectory rekursiv alle leeren Unterverzeichnisse löschen kann, bis auf das Startverzeichnis.
Kann mir jemand helfen?
Vielen Dank schon mal.
Re: Rekursives Löschen leerer Verzeichnisse auf einem FTP-Se
Verfasst: 09.02.2012 19:09
von HeX0R
Vielleicht solltest du einfach mal anfangen was zu basteln, und wenn du nicht mehr weiterkommst fragen?
Ich glaube jetzt kaum, dass jemandem so fade ist, dass er dir das von nix auf alles zusammenkleistert.
Und die PB-FTP-Befehle sind eigentlich recht ordentlich dokumentiert.
Re: Rekursives Löschen leerer Verzeichnisse auf einem FTP-Se
Verfasst: 14.02.2012 13:28
von Amor_2001
Ich tue mich halt schwer mit einem rekursiven Code....
Leider haben auch die FTP-Directory-Befehle nicht alle Parameter der "normalen" Directory-Befehle. Sonst hätte ich das Beispiel dafür mal übgeschrieben.
Re: Rekursives Löschen leerer Verzeichnisse auf einem FTP-Se
Verfasst: 14.02.2012 14:07
von bobobo
wie bitte ?
Warum geht dann folgendes ??
der Code ist aus der Hilfe zu FileSystem
etwas gepimpt mit den FTPGeschichten
Code: Alles auswählen
;pb4.60-winXP
If OpenWindow(0, 100, 200, 290, 200, "PureBasic - FileSystem Example")
InitNetwork()
;StringGadget (0, 10, 10, 202, 24, GetHomeDirectory())
ButtonGadget (1, 220, 10, 60 , 24, "List")
ListViewGadget(2, 10, 40, 270, 150)
ftpserver.s="Dein FTPServer"
user.s="User"
pw.s="Passwort"
OpenFTP(0,ftpserver,user,pw)
SetFTPDirectory(0,"httpdocs")
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
If EventGadget() = 1 ; Read
ClearGadgetItems(2) ; Clear all the items found in the ListView
If ExamineFTPDirectory(0);, GetGadgetText(0), "*.*")
While NextFTPDirectoryEntry(0)
FileName$ = FTPDirectoryEntryName(0)
If FTPDirectoryEntryType(0) = #PB_DirectoryEntry_Directory
FileName$ = "[DIR] "+FileName$
EndIf
AddGadgetItem(2, -1, FileName$)
Wend
Else
MessageRequester("Error","Can't examine this directory: "+GetGadgetText(0),0)
EndIf
EndIf
EndIf
Until EventID = #PB_Event_CloseWindow
CloseFTP(0)
EndIf
End
Re: Rekursives Löschen leerer Verzeichnisse auf einem FTP-Se
Verfasst: 14.02.2012 14:36
von Amor_2001
@bobobo
danke für den Code.
Leider zeigt er von 9 Verzeichnissen nur 4 an. Und leider auch nicht die Unterverzeichnisse darunter.
Hast du noch eine weitere Idee????
Re: Rekursives Löschen leerer Verzeichnisse auf einem FTP-Se
Verfasst: 14.02.2012 15:40
von bobobo
Die Boardsuche nach "rekursiv" bringt (oder sollte bringen) eine anständige Liste von
rekursiven Verzeichnisauflistungen.
Daraus kann man sich sicher was ableiten.
Re: Rekursives Löschen leerer Verzeichnisse auf einem FTP-Se
Verfasst: 14.02.2012 16:30
von STARGÅTE
Amor_2001 hat geschrieben:Hast du noch eine weitere Idee????
Eigentlich solltest du die Ideen haben.
Vorab:
In FTP ist es sehr Zeitintensiv,
alle Verseichnisse gleichzeitig auszulesen.
Nicht ohne Grund gibt es bei ExamineFTPDirectory()
kein Parameter für das Verzeichnis,
weil dieses nämlich immer "per Hand" gesetzt werden muss.
Hier mal ein Code, zum Auslesen eines Kompletten FTP-Ordners inklusive Unterordner:
Code: Alles auswählen
; Verzeichniswechsel mit Pfad-Unterstützung
Procedure SetFTPDirectoryEx(FTP, Directory.s)
If GetPathPart(Directory)
SetFTPDirectoryEx(FTP, Trim(GetPathPart(Directory), "/"))
EndIf
SetFTPDirectory(FTP, GetFilePart(Directory))
EndProcedure
; Rekursives Auslesen eines Pfads
Procedure ExamineFTPDirectoryRecusive(FTP.i, Directory.s, Level.i=0)
Protected NewList Folder.s()
Protected NewList File.s()
SetFTPDirectoryEx(FTP, Directory)
If ExamineFTPDirectory(FTP)
; Erst mal alles lesen ...
While NextFTPDirectoryEntry(FTP)
Select FTPDirectoryEntryType(FTP)
Case #PB_FTP_File
AddElement(File()) : File() = FTPDirectoryEntryName(FTP)
Case #PB_FTP_Directory
AddElement(Folder()) : Folder() = FTPDirectoryEntryName(FTP)
EndSelect
Wend
; ... und jetzt die Unterordner durchsuchen
ForEach Folder()
Debug Space(Level*2) + "+ " + Folder()
ExamineFTPDirectoryRecusive(FTP, Folder(), Level+1) ; Unterordner auflisten
SetFTPDirectory(FTP, "..") ; Zurückspringen
Next
ForEach File()
Debug Space(Level*2) + " " + File()
Next
EndIf
EndProcedure
Enumeration
#FTP
EndEnumeration
InitNetwork()
If OpenFTP(#FTP, "*Server*", "*Benutzer*", "*Passwort*")
ExamineFTPDirectoryRecusive(#FTP, "*Pfad*")
EndIf
Re: Rekursives Löschen leerer Verzeichnisse auf einem FTP-Se
Verfasst: 14.02.2012 16:55
von Amor_2001
Vielen Dank @STARGATE
Ich finde den Code übersichtlich und er hat mir auch ein beim Verständnis zu FTP geholfen.
Leider zeigt mein Debug-Fenster nur folgendes an...
+ [RWCEAFMS] fotoagentur1 512 Feb 13 02:33 API_NRW_50
+ [RWCEAFMS] fotoagentur1 512 Feb 13 02:33 API_NRW_50
+ [RWCEAFMS] fotoagentur1 512 Feb 13 02:33 API_NRW_50
+ [RWCEAFMS] fotoagentur1 512 Feb 13 02:33 API_NRW_50
+ [RWCEAFMS] fotoagentur1 512 Feb 13 02:33 API_NRW_50
+ [RWCEAFMS] fotoagentur1 512 Feb 13 02:33 API_NRW_50
+ [RWCEAFMS] fotoagentur1 512 Feb 13 02:33 API_NRW_50
+ [RWCEAFMS] fotoagentur1 512 Feb 13 02:33 API_NRW_50
+ [RWCEAFMS] fotoagentur1 512 Feb 13 02:33 API_NRW_50
... und nicht die Unterverzeichnisnamen. Habe auch schon experimientiert, das Ergebnis bleibt aber leider.
Re: Rekursives Löschen leerer Verzeichnisse auf einem FTP-Se
Verfasst: 14.02.2012 17:06
von HeX0R
Welchen FTP-Server benutzt du?
Mit IIS kommt PB nicht wirklich klar und zeigt nur Müll an.
Re: Rekursives Löschen leerer Verzeichnisse auf einem FTP-Se
Verfasst: 14.02.2012 17:12
von STARGÅTE
Die Ordnernamen wurden mich auch etwas ...
Habe noch ein paar sicherheitsabfragen mit eingebaut, bitte noch mal testen:
Code: Alles auswählen
; Verzeichniswechsel mit Pfad-Unterstützung
Procedure SetFTPDirectoryEx(FTP, Directory.s)
If GetPathPart(Directory)
If SetFTPDirectoryEx(FTP, Trim(GetPathPart(Directory), "/"))
ProcedureReturn SetFTPDirectory(FTP, GetFilePart(Directory))
EndIf
Else
ProcedureReturn SetFTPDirectory(FTP, Directory)
EndIf
EndProcedure
; Rekursives Auslesen eines Pfads
Procedure ExamineFTPDirectoryRecusive(FTP.i, Directory.s, Level.i=0)
Protected NewList Folder.s()
Protected NewList File.s()
If SetFTPDirectoryEx(FTP, Directory)
If ExamineFTPDirectory(FTP)
; Erst mal alles lesen ...
While NextFTPDirectoryEntry(FTP)
Select FTPDirectoryEntryType(FTP)
Case #PB_FTP_File
AddElement(File()) : File() = FTPDirectoryEntryName(FTP)
Case #PB_FTP_Directory
AddElement(Folder()) : Folder() = FTPDirectoryEntryName(FTP)
EndSelect
Wend
; ... und jetzt die Unterordner durchsuchen
ForEach Folder()
Debug Space(Level*2) + "+ " + Folder()
ExamineFTPDirectoryRecusive(FTP, Folder(), Level+1) ; Unterordner auflisten
SetFTPDirectory(FTP, "..") ; Zurückspringen
Next
ForEach File()
Debug Space(Level*2) + " " + File()
Next
Else
Debug "* Verzeichnisauflistung fehlgeschlagen * : "+Directory
EndIf
Else
Debug "* Verzeichneswechsel nicht möglich * : "+Directory
EndIf
EndProcedure
Enumeration
#FTP
EndEnumeration
InitNetwork()
If OpenFTP(#FTP, "Server", "User", "Password")
ExamineFTPDirectoryRecusive(#FTP, ".") ; Hauptverzeichnis
EndIf