Seite 1 von 3

prüfen ob Ordner leer ist

Verfasst: 18.12.2005 19:59
von sen-me
wie kann ich prüfen ob ein ordner leer ist? und zwar in mitten einer seach action, also ich lasse alles absuchen und wenn der ordner leer ist soll er den überspringen

Re: prüfen ob Ordner leer ist

Verfasst: 18.12.2005 21:19
von scholly
sen-me hat geschrieben:wie kann ich prüfen ob ein ordner leer ist?
Ergebnis = NextDirectoryEntry() .....'Ergebnis' kann die folgenden Werte annehmen:
0: keine weiteren Einträge im Verzeichnis
1: dieser Eintrag ist eine Datei
2: dieser Eintrag ist ein Verzeichnis
Geht das damit nicht ?

bis denne...
scholly

Verfasst: 18.12.2005 21:22
von Laurin
Ich denke, ich hab's ausreichend dokumentiert. ;)

Code: Alles auswählen

; German forum: http://forums.purebasic.com/german/viewtopic.php?t=6117
; Author: Laurin
; Date: 18. December 2005

Procedure.l IsEmptyDir(Dir.s)
  Protected DirElement.l                   ; Variablen, die benötigt werden und nicht(!) in Konflikt
                                           ; mit gleichnamigen globalen Varaiblen geraten sollen.
  
  ExamineDirectory(#PB_Any, Dir, "*.*")    ; Verzeichnis "öffnen"
  
  Repeat                                   ; jedes Verzeichniselement prüfen
    DirElement = NextDirectoryEntry()      ; schauen wir uns das nächste Element des Verzeichnisses an
    
    Select DirElement
      Case 1                               ; Datei gefunden
        ProcedureReturn #False             ; -> raus aus der Procedure
        
      Case 2                               ; Verzeichnis gefunden
        If DirectoryEntryName() <> "."     ; Das Verzeichnis "." ist ein Platzhalter für das aktuelle Verzeichnis. (*)
          If DirectoryEntryName() <> ".."  ; Das Verzeichnis ".." ist ein Platzhalter für das übergeordnete Verzeichnis. (*)
            ProcedureReturn #False         ; -> raus aus der Procedure
          EndIf
        EndIf
    EndSelect
  Until DirElement = 0                     ; 0 = kein weiteres Element im Verzeichnis

  ProcedureReturn #True
  
  ;(*)
  ; "." und ".." sind Bestandteil eines jeden Verzeichnisses unter Windows.
EndProcedure

; --- Anwendungsbeispiel ---
Dir.s = PathRequester("Verzeichnis wählen", "C:\")

If IsEmptyDir(Dir)
  MessageRequester("Ergebnis", "Das Verzeichnis " + Dir + " ist leer.")
Else
  MessageRequester("Ergebnis", "Das Verzeichnis " + Dir + " ist nicht leer.")
EndIf

End

Verfasst: 18.12.2005 21:28
von sen-me
und was is wenn
/ordner/ordner2
is, wobei ordner2 leer ist

dann gibt er bei odner false aus :/

Verfasst: 18.12.2005 21:35
von scholly
Laurin hat geschrieben:Ich denke, ich hab's ausreichend dokumentiert. ;)

Code: Alles auswählen

streiche: If DirectoryEntryName(() <> ".." 
setze:If DirectoryEntryName() <> ".." 
:mrgreen:
SCNR...
scholly

Verfasst: 18.12.2005 21:36
von Andre
@Laurin: das nenn ich mal CodeArchiv-gerechte Beiträge :allright:

(auch wenn jetzt noch OS + Demo-Kompatibilität dazugehört :wink: )

Verfasst: 18.12.2005 21:56
von scholly
sen-me hat geschrieben:und was is wenn
/ordner/ordner2
is, wobei ordner2 leer ist

dann gibt er bei odner false aus :/
Bei mir nicht.
Ich hab den Code gleich veriennahmt und c:\temp\egal eingerichtet, wobei in temp nur egal ist und egal leer ist.
Ergebnis: "Das Verzeichnis C:\temp\ ist nicht leer".
Und das stimmt :)
scholly

Verfasst: 18.12.2005 23:04
von sen-me
fazit ich müsste erst den ordner egal durchsuchen ob er leer is, und dann temp? (den ordner muss ich dan bei der suche halt ausschließen

Verfasst: 18.12.2005 23:26
von scholly
sen-me hat geschrieben:fazit ich müsste erst den ordner egal durchsuchen ob er leer is, und dann temp? (den ordner muss ich dan bei der suche halt ausschließen
Radio Eriwan hat geschrieben:Im Prinzip ja....
Es könnte uns Außenstehenden vielleicht helfen, wenn Du uns erzählst, wonach Du wo suchst.

Verfasst: 19.12.2005 03:51
von Laurin
Andre hat geschrieben:@Laurin: das nenn ich mal CodeArchiv-gerechte Beiträge :allright:
Argh, nee, sorry. Mit Letzteren kann ich nicht dienen.
Es freut mich aber trotzdem, dass dir das so gefällt.
sen-me hat geschrieben:und was is wenn
/ordner/ordner2
is, wobei ordner2 leer ist

dann gibt er bei odner false aus :/
Das dürfte nicht sein. War das Verzeichnis wirklich leer?

@Scholly:
Hab's mal fix gändert (hoffentlich sieht's keiner) /:->