[PB 4.00] Leere Ordner erkennen

Anfängerfragen zum Programmieren mit PureBasic.
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Konnte den Code von AND nicht testen. Hier aber der korrigierte Code:

Edit: Falscher Proceduren-Aufruf herausgenommen!

Code: Alles auswählen

Procedure DeleteEmptyFolders(Folder.s) 
    Protected ID 
    Protected Not_Empty 
    ID = ExamineDirectory(#PB_Any, Folder, "*") 
    
    While NextDirectoryEntry(ID) 
        Select DirectoryEntryType(ID) 
            Case #PB_DirectoryEntry_Directory 
                If DirectoryEntryName(ID) <> "." And DirectoryEntryName(ID) <> ".." 
                   If Right(Folder,1)="\" Or Right(Folder,1)="/" 
                      Not_Empty + DeleteEmptyFolders(Folder + DirectoryEntryName(ID)) 
                   Else 
                      Not_Empty + DeleteEmptyFolders(Folder + "/" + DirectoryEntryName(ID)) 
                   EndIf 
                EndIf 
            Case #PB_DirectoryEntry_File 
                Not_Empty = 1 
        EndSelect 
    Wend 
    FinishDirectory(ID) 
    If Not_Empty = 0 
        DeleteDirectory(Folder, "*") 
    EndIf 
    ProcedureReturn Not_Empty 
EndProcedure 

DeleteEmptyFolders("/Blöder/böser/Pfad")
Der Code von vonTurnundTaxis arbeitet bei mir korrekt.

Beide Codes laufen hervorragend und das in einer angenehmen Geschwindigkeit. Hab das ganze mal in einem kleinen Verzeichnis getestet.

Werde jetzt nochmal mit meinem Chef sprechen und dann die EXE starten. Melde mich dann zurück - entweder mit oder ohne Job :lol:
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Meine Procedure ist deswegen etwas komplexer, weil ich ohne Rekursionen
auskommen wollte und außerdem eine Liste der zu löschenden Verzeichnisse
zurückgeben wollte, damit man evtl. noch Verzeichnisse vor dem Löschen
ausnehmen kann.
Die Sortierung der zurückgegebenen Liste ist auch praktisch, weil immer
zuerst alle Unterordner aufgelistet und so gelöscht werden können. Jeder
Ordner ist also vor dem Löschen auch von sämtlichen leeren Unterordnern
befreit.
Zugegeben ist die Procedure nicht ganz überschaubar, hat aber deswegen
auch einiges an Gehirnschmalz verbraucht. :wink:

@AND51:
Du solltest in Zukunft versuchen nicht zu überheblich aufzutreten. Bei vielen
deiner Postings kommt es mir so vor als ob du deine Codes als die besten
hälst. Das solltest du in Zukunft vielleicht vermeiden. Damit fällt man nämlich
schneller auf den Kopf als du glaubst.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

@ edel: Nun, irgendwie hast du schon Recht. Ist ja jeden selbst überlassen, was er wie wo einbaut. Geht man von einer Benutzereingabe aus, ist es sinnvoll, eine Prüfung zu haben; ich dachte beim Schreiben des Posts aber an Rückgabewerte von PB-Funktionen, die von Haus aus schon einen angehängtn Backslash haben.

@ TurnundTaxis: Ich habe deine und meine getestet, Ergebnis:
AND51: 547 ms
vonTurnundTaxis: 578 ms
Fazit: Beide gleich schnell.
Das bei mir auch un-leere Ordner gelöscht werden, konnte ich nicht bestätigen; vor veröffentlichung meines Codes habe ich mehrere Stichproben gemacht, ob die angezeigten Ordner auch wirkich leer sind.

Nur, damit wir uns richtig verstehen: Erinnere dich doch noch mal an das Beispiel mit dem Pfad "C:\myOrdner\temp\leer\". es sind keine Dateien in den drei Ordnern, somit müssen auch alle drei Order "myOrdner", "temp" und "leer" gelöscht werden (nicht, dass du jetzt denkst, nur "leer" müsse gelöscht werden oder so).

@ NtQ: Ja du hast Recht, *SRY*
Es sollte aber überhaupt nicht so rüberkommen. Ich halte mich wahrlich nicht für "den Besten", ich wollte durch die Auflistung der von mir genannten Punkte nur auf mögliche, wichtige Verbesserungen hinweisen. Ich werde mir jedoch deinen Rat zu Herzen nehmen.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
vonTurnundTaxis
Beiträge: 2130
Registriert: 06.10.2004 20:38
Wohnort: Bayreuth
Kontaktdaten:

Beitrag von vonTurnundTaxis »

@AND: Ich hatte diese Konstellation:

Code: Alles auswählen

/test
  /Ordner_1
  /Ordner_2
  /Ordner_3
    Ordner_3_1
    Ordner_3_2
        Datei
Übrigbleiben sollte das:

Code: Alles auswählen

/test
  /Ordner_3
    Ordner_3_2
        Datei
Bei dir ist aber der Komplette Ordner "test" gelöscht worden.
Nicht durch Zorn, sondern durch Lachen tötet man
ClipGrab | Pastor - jetzt mit kurzen URLs!
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Soooo :mrgreen:

Also erstmal: Meinen Job habe ich noch - bis jetzt :D

Hab vorher nochmal nen Backup machen lassen, damit, falls was schief gegangen ist, wir noch nen Notplan haben, aber so wie es aussieht, ist alles gutgegangen.

Insgesamt haben die Codes folgendes bewältigt:

Anzahl der zu durchsuchende Netzwerklaufwerke:
4

Größe der jeweiligen Laufwerke:
(1) 550 GB
(2) 600 GB
(3) 600 GB
(4) 11,6 GB

Anzahl der Dateien:
(1) 976 Dateien, 211 Ordner
(2) 775.650 Dateien, 65.088 Ordner
(3) 751.332 Dateien, 59.785 Ordner
(4) 6.558 Dateien, 384 Ordner

Statistik:
(1) 150 Dateien gelöscht, 0 Ordner gelöscht, 201 Dateien gefiltert/umkopiert,
(2) 115 Dateien gelöscht, 1.389 Ordner gelöscht, 244.961 Dateien gefiltert/umkopiert,
(3) 4 Dateien gelöscht, 15.111 Ordner gelöscht, 321.756 Dateien gefiltert/umkopiert,
(4) 19 Dateien gelöscht, 213 Ordner gelöscht, 7.642 Dateien gefiltert/umkopiert,

Ich hab die Codes als Exen auf zwei Rechner laufen lassen. Hat zwar mehrere Stunden gedauert, aber das Ergebnis scheint i.O.

Bedanken tue ich mich aber erst, wenn ich weiß das alles gut gegangen ist <) .... Naja gut, nen kleines Dankeschön gibts schon mal vorab: Aaaaalssooooo: Ich danke euch ganz ehrzlich für eure tolle Unterstützung bei dieser Sache! Durch die Konversation konnten kleinere Unüberlegtheiten und Probleme schon vorher aus der Welt geschafft werden!

@ NicTheQuick
Komplexere Dinge verlangen komplexere Lösungen. Auch wenns etwas länger Dauert, bis man bei diesem Code durchgestiegen ist, ist er durch die vorhandenen Unter-Funktionen genau das was ich gebraucht habe!

@ All
Vielleicht war die Äußerung von AND51 etws falsch formuliert und verstanden worden. Im Grunde ist es ja völlig in Orndung, stolz auf seine Arbeit zu sein. Zudem fand ich seine Äußerungen auch garnicht nicht sooo schlimm. Er ist immerhin noch kritikfähig,.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Ich danke dir auch.

Mit dir kann man gut zusammenarbeiten, bist nett und gibst auch Feedback, ob unsere Hilfe/Codes dir auch geolfen haben, etc.

Bleibt nur noch eines, nämlich: :allright:

Ach ja: Bitte ändere doch noch ggf. den Titel, dieses Threads, du hast doch mittlerweile kein PB 3.91 mehr, sondern 4.00. Außerdem funktioneiren die meisten Beispielcodes nur in PB 4.00 (falls später mal jemand nach diesem Thread sucht).
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Titel hab ich angepasst :)
Antworten