While NextDirectoryEntry(dir)
filename = DirectoryEntryName(dir)
If filename = "." Or filename = ".." Or DirectoryEntryType(dir) = #PB_DirectoryEntry_File Or DirectoryEntryType(dir) = #PB_DirectoryEntry_Directory
; Verzeichnis nicht leer
Continue
Else
; und so weiter
EndIf
Wend
Meine Frage: Finde ich damit wirklich ausschließlich leere Verzeichnisse oder werden auch Verzeichnisse als "leer" erkannt, für deren Inhalt Zugriffs-/Leserechte fehlen?
Bin aktiv in der rentenvorbereitenden Arbeitslosigkeit - zwangsweise. Auch nach >30 Jahren im Betrieb springst Du über die Klinge, wenn der (Miss-)Manager seinen Hintern retten will. Lasst Euch von euren Arbeitgebern bloß nix von wegen Loyalität erzählen - wenn's drauf ankommt, ist die nix Wert!
Du kannst es doch einfach ausprobieren.
Schau dir auch noch `DirectoryEntryAttributes()` an. Je nach Betriebssystem musst du da eine Unterscheidung einbauen.
Bei Linux und Mac ist es so, dass wenn ein Verzeichnis nicht die Execute-Rechte hat, dann kann man seinen Inhalt nicht auflisten. Was du allerdings nicht mit Purebasic direkt abfragen kannst, sind erweitere Rechte mit ACLs.
Danke für Dein Feedback. In meinem Fall geht es nur um Windows und auch nur um interne Laufwerke und/oder USB-Laufwerke. Also z. B. nicht um Netzwerklaufwerke oder ähnliches.
Verstehe den Sinn einer Prüfung mit `DirectoryEntryAttributes()` dabei nicht. Wenn die Anwesenheit einer Datei (oder eines anderen Unterverzeichnisses) erkannt wird, dann ist es doch für die Feststellung, dass das Verzeichnis nicht leer ist, unerheblich, welche Attribute eine gefundene Datei (bzw. ein Verzeichnis) hat - oder bin ich da auf dem Holzweg?
Meine Frage geht eher in die Richtung, ob DirectoryEntryType() immer alle Verzeichnisinhalte findet oder ob es fehlende Leserechte geben kann, die ein Verzeichnis nur leer erscheinen lassen?
Bin aktiv in der rentenvorbereitenden Arbeitslosigkeit - zwangsweise. Auch nach >30 Jahren im Betrieb springst Du über die Klinge, wenn der (Miss-)Manager seinen Hintern retten will. Lasst Euch von euren Arbeitgebern bloß nix von wegen Loyalität erzählen - wenn's drauf ankommt, ist die nix Wert!
Procedure IsFolderEmpty(Pathname.s) ; returns #False or #True
Protected ND, result
result = #False
ND = ExamineDirectory(#PB_Any, Pathname, "")
While NextDirectoryEntry(ND)
If DirectoryEntryType(ND) = #PB_DirectoryEntry_File
result = #True : Break
Else
If DirectoryEntryName(ND) <> "." And DirectoryEntryName(ND) <> ".."
result = #True : Break
EndIf
EndIf
Wend
FinishDirectory(ND)
ProcedureReturn result
EndProcedure
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
hier der funktionierende Beispielcode für das Listen leerer Verzeichnisse.
wenn du den ganzen Satz der FileSystemFunktionen brauchst. ListFiles, ListDirectories .. dann