prüfen ob Ordner leer ist
IsEmptyDir für PB 4.01
Ich brauchts heute mal wieder und wenn ich noch nicht schlaftrunken bin, sollte das hier gehen:
guts nächtle...
scholly
Code: Alles auswählen
Procedure.l IsEmptyDir(Dir$)
Protected DirElement.l
Protected wasgefunden.s
ExamineDirectory(0, Dir$, "*.*")
DirElement = NextDirectoryEntry(0)
While direlement <> 0
If DirectoryEntryType(0) = #PB_DirectoryEntry_File
wasgefunden = "wahr"
direlement = 0
Else
If DirectoryEntryName(0) = "."
wasgefunden = "falsch"
ElseIf DirectoryEntryName(0) = ".."
wasgefunden = "falsch"
Else
wasgefunden = "wahr"
direlement = 0
EndIf
EndIf
DirElement = NextDirectoryEntry(0)
Wend
If wasgefunden = "falsch"
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
;(*)
; "." und ".." sind Bestandteil eines jeden Verzeichnisses unter Windows.
EndProcedure
; --- Anwendungsbeispiel ---
Dir$ = 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
scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
seit 17.12.08: PB 4.3 unter XP Home(SP3)
für prozeduren ist #PB_ANY empfehlenswert, um konflikte zu vermeiden. außerdem sollte man gucken, ob ExamineDirectory() überhaupt geklappt hat.
<eddi:>
hab' noch das fehlende FinishDirectory(dir) ergänzt.
Code: Alles auswählen
Procedure dirIsEmpty(path.s)
Protected res.l
Protected name.s
Protected dir.l
If Right( path, 1) <> "\"
path+"\"
EndIf
dir=ExamineDirectory(#PB_Any, path, "*.*")
If dir
res=1
While NextDirectoryEntry(dir) And res
name=DirectoryEntryName(dir)
If name <> "." And name <> ".."
res=0
EndIf
Wend
FinishDirectory(dir)
EndIf
ProcedureReturn res
EndProcedure
Debug dirIsEmpty("C:\test\empty.dir\")
Debug dirIsEmpty("C:\Windows")
Debug dirIsEmpty("C:\Windows\")
Debug dirIsEmpty("T:\I_am_not\")
Debug dirIsEmpty(" h th6tht öpö tht ht #+#+ 3547")
hab' noch das fehlende FinishDirectory(dir) ergänzt.
Habe noch eine Verbesserung
#Null hat eine Zeile mehr als ich!
Ich habe 16, würde man das Break weglassen, wär es eine Zeile weniger, dann wird aber das ganze Directory bis zum Ende durchsucht!
Die FileSize() Zeile könnte man auch noch weglassen.
Edit: Verbessert

#Null hat eine Zeile mehr als ich!
Ich habe 16, würde man das Break weglassen, wär es eine Zeile weniger, dann wird aber das ganze Directory bis zum Ende durchsucht!
Die FileSize() Zeile könnte man auch noch weglassen.
- Meine Funktionen:
- Hängt \ an, wenn nicht schon geschehen
- Gibt 0 zurück, wenn Verzeichnis leer
- Gibt -3 zurück, wenn Verzeichnis doch nicht leer
- Gibt -1 zurück, wenn 'pfad$' in weder eine Datei noch ein Ordner ist
- Gibt -2 zurück, wenn 'pfad$' zwar ein gültiger Ordner ist, aber nicht untersucht werden kann
- Gibt X zurück, wenn 'pfad$' eine Datei ist. X ist dann die Dateigröße in Bytes, weshalb der Rückgabewert der Procedure ein Quad ist
- Das Break bricht sofort ab, wenn eine Datei gefunden wurde, das spart unter Umständen sehr viel Zeit!
Code: Alles auswählen
Procedure.q isNotEmpty(pfad$)
If Not Right(pfad$, 1) = "\"
pfad$+"\"
EndIf
Protected dir=ExamineDirectory(#PB_Any, pfad$, ""), empty=0
If dir
While NextDirectoryEntry(dir)
If DirectoryEntryName(dir) <> "." And DirectoryEntryName(dir) <> ".."
empty=-3
Break
EndIf
Wend
FinishDirectory(dir)
ProcedureReturn empty
EndIf
ProcedureReturn FileSize(Left(pfad$, Len(pfad$)-1))
EndProcedure
Debug isEmpty("C:\") ; gibt es, NICHT leer
Debug isEmpty("C:\temp") ; gibt es auch, NICHT leer
Debug isEmpty("C:\temp\egal") ; gibt es, >>>LEER<<<
Debug isEmpty("C:\temp\GIBT ES NICHT!!!!") ; gibt es NICHT
Debug isEmpty("C:\pagefile.sys") ; kein gültiger ordner, sondern eine datei
Zuletzt geändert von AND51 am 13.12.2006 16:45, insgesamt 4-mal geändert.
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
- Tafkadasom2k5
- Beiträge: 1578
- Registriert: 13.08.2005 14:31
- Kontaktdaten:
#NULL hat geschrieben:__ IsEmpty() ?
_____ YES, äh..naja
__ IS_EMPTY() ??
_____ YES, but, äh no, is not
__ IS_EMPTY() ????
_____ NO,, äh, ..#TRUE, but NO, is not empty,
__ ???????
_____ is file.
_____ and file is IsEmpty() bytes groß.
__ ...
_____![]()
![]()
![]()
__ If IsEmpty()=1 And One()=Empty() And Not One()=OneByteFile()
...





AND51 hat geschrieben:Machst du dich über mich lustig?





Du machst mich fertig, AND... (deine Frage ist ja...
You've made my day #NULL and AND




*Tränenwegwisch*


OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
- 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
entschuldige AND51.
vollkommener blödsinn ist es ja nicht.
wenn man einen verzeichnis übergibt, erfährt man ob es einträge enthält. und wenn man eine datei übergibt, erfährt man, ob sie leer ist.
verzeichnisse und dateien sind aber verschiedene dinge und gerade in so einem fall würde ich das trennen.
..
ne halt.
geht ja gar nicht. wenn man eine datei übergibt, wird ein backslash angehängt. also nixda, verzeichnis existiert nicht.
und die byte-größe, die du zurückgeben willst, ist nicht die der mit pfad übergebenen datei. sondern einer gefundenen datei innerhalb eben dieses pfads(!).
..stimmt also vorneundhintennicht.
(aber wir dürfen trotzdem freunde bleiben
)
..ne halt (2)
also doch. es ist wirklich so wie NTQ sagte.
if isEmpty()=1
..verzeichnies leer, oder 1 byte große datei drin.
also ich würde eine einfache boolsche antwort bevorzugen.
was anderes wär es bei isNotEmpty() oder so und dem negierten rückgabewert. da kann man dann entscheiden, ob man sich mit mit #true/#false zufrieden gibt, oder ob man den #true-wert weiter untersucht, z.b. "no is not empty, weil verz. gar nicht da" oder "..weil datei drin..".
inwieweit man funktionen auf bool, oder eher auf konkrete werte prüfen muß ist sicher auch geschmackssache und kommt auf die funktion an.
aber funktionieren sollte es dann auf jeden fall.

vollkommener blödsinn ist es ja nicht.
wenn man einen verzeichnis übergibt, erfährt man ob es einträge enthält. und wenn man eine datei übergibt, erfährt man, ob sie leer ist.
verzeichnisse und dateien sind aber verschiedene dinge und gerade in so einem fall würde ich das trennen.
..
ne halt.
geht ja gar nicht. wenn man eine datei übergibt, wird ein backslash angehängt. also nixda, verzeichnis existiert nicht.
und die byte-größe, die du zurückgeben willst, ist nicht die der mit pfad übergebenen datei. sondern einer gefundenen datei innerhalb eben dieses pfads(!).
..stimmt also vorneundhintennicht.
(aber wir dürfen trotzdem freunde bleiben

..ne halt (2)
also doch. es ist wirklich so wie NTQ sagte.
if isEmpty()=1
..verzeichnies leer, oder 1 byte große datei drin.
also ich würde eine einfache boolsche antwort bevorzugen.
was anderes wär es bei isNotEmpty() oder so und dem negierten rückgabewert. da kann man dann entscheiden, ob man sich mit mit #true/#false zufrieden gibt, oder ob man den #true-wert weiter untersucht, z.b. "no is not empty, weil verz. gar nicht da" oder "..weil datei drin..".
inwieweit man funktionen auf bool, oder eher auf konkrete werte prüfen muß ist sicher auch geschmackssache und kommt auf die funktion an.
aber funktionieren sollte es dann auf jeden fall.