Rekursives Löschen leerer Verzeichnisse auf einem FTP-Server
Rekursives Löschen leerer Verzeichnisse auf einem FTP-Server
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.
Kann mir jemand helfen?
Vielen Dank schon mal.
- HeX0R
- Beiträge: 3042
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Re: Rekursives Löschen leerer Verzeichnisse auf einem FTP-Se
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.
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.
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
Re: Rekursives Löschen leerer Verzeichnisse auf einem FTP-Se
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.
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
wie bitte ?
Warum geht dann folgendes ??
der Code ist aus der Hilfe zu FileSystem
etwas gepimpt mit den FTPGeschichten
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
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Re: Rekursives Löschen leerer Verzeichnisse auf einem FTP-Se
@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????
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
Die Boardsuche nach "rekursiv" bringt (oder sollte bringen) eine anständige Liste von
rekursiven Verzeichnisauflistungen.
Daraus kann man sich sicher was ableiten.
rekursiven Verzeichnisauflistungen.
Daraus kann man sich sicher was ableiten.
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Re: Rekursives Löschen leerer Verzeichnisse auf einem FTP-Se
Eigentlich solltest du die Ideen haben.Amor_2001 hat geschrieben:Hast du noch eine weitere Idee????
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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Rekursives Löschen leerer Verzeichnisse auf einem FTP-Se
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.
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.
- HeX0R
- Beiträge: 3042
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Re: Rekursives Löschen leerer Verzeichnisse auf einem FTP-Se
Welchen FTP-Server benutzt du?
Mit IIS kommt PB nicht wirklich klar und zeigt nur Müll an.
Mit IIS kommt PB nicht wirklich klar und zeigt nur Müll an.
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
Re: Rekursives Löschen leerer Verzeichnisse auf einem FTP-Se
Die Ordnernamen wurden mich auch etwas ...
Habe noch ein paar sicherheitsabfragen mit eingebaut, bitte noch mal testen:
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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr