| |
|
|
Frank Abbing | Vielleicht ist so ein Thread mal nett. Jemand stellt eine Programmier-Aufgabe und der Rest versucht, eine kurze und gute Lösung zu finden... Die beste Lösung könnte zu den Code-Snippets gepackt werden.
Meine Aufgabe für heute ist:
Finde eine kurze und schnelle Lösung um festzustellen, ob ein Directory leer ist oder nicht! |
|
|
| |
|
|
|
Rolf Koch | Mach mal den Anfang machen. Natürlich nur auf profane Art
Und von der Länge find ich es persönlich noch in Ordnung, da ich extrem komprimierte Codes sehr leseunfreundlich finde ^^ KompilierenMarkierenSeparieren |
|
|
| |
|
|
|
Jörg Sellmeyer | Das fällt mir dazu ein. Ist länger aber schneller. Wende Rolfs Beispiel mal auf C: an, dann ist erstmal Warten angesagt. Außerdem sollte wieder ins ursprüngliche Verzeichnis gewechselt werden. KompilierenMarkierenSeparieren
Proc DirIsEmpty
Parameters Dir$
Declare Dir1$
CaseNot DirExists(Dir$):Return -1
Dir1$ = GetDir$("@")
ChDir Dir$
If (Len(Dir$) <= 3) = 0
FindFirst$("*")
FindNext$()
Dir$ = FindNext$()
Else
Dir$ = FindFirst$("*")
EndIf
ChDir Dir1$
Return Len(Dir$) = 0
EndProc
Declare Ausgabe$
Ausgabe$ = "qnicht vorhanden!q,qnicht leerq,qleerq"
Print "C:XXXXX ist " + SubStr$(Ausgabe$,DirIsEmpty("C:XXXXX") + 2,",")
MkDir "C:XXXXX"
Print "C:XXXXX ist " + SubStr$(Ausgabe$,DirIsEmpty("C:XXXXX") + 2,",")
Assign #1,"Test.txt"
ReWrite #1
Print #1,"Test"
Close #1
Print "C:XXXXX ist " + SubStr$(Ausgabe$,DirIsEmpty("C:XXXXX") + 2,",")
Erase "C:XXXXXTest.txt"
RMDir "C:XXXXX"
' das Löschen funktioniert bei mir nicht - keine Ahnung warum
' liegts am System oder an Profan?
' also gegebenenfalls von Hand löschen
Print $Winpath + " ist " + SubStr$(Ausgabe$,DirIsEmpty($winpath) + 2,",")
Print "C: ist " + SubStr$(Ausgabe$,DirIsEmpty("C:") + 2,",")
WaitInput
Edit: noch ne kleine Korrektur angebracht! |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 25.08.2008 ▲ |
|
|
|
|
Rolf Koch | Zurück ins alte Verzeichnis? Jo haste voll recht Aber Root C: ??? Sollte doch immer irgendwas drinne liegen
Edit: Habs auch angepasst. Fehlt bestimmt wie immer noch was, soll aber ja auch kurz sein ^^ C: E: und Co sind ja Laufwerke und nicht direkt Verzeichnisse, oder sehe ich das falsch? |
|
|
| |
|
|
|
| Koennen wir uns auf "performantestes Beispiel" einigen? |
|
|
| |
|
|
|
Jörg Sellmeyer |
C: E: und Co sind ja Laufwerke und nicht direkt Verzeichnisse, oder sehe ich das falsch?
Du weißt nie, was ein Anwender mit Deinem Programm macht. Sowas muß man auf jeden Fall voraussehen. Außerdem glit das Gleiche für tief verschachtelte Verzeichnisse. Ich hatte schon Ordnerstrukturen mit 20 - 30000 Dateien und hunderten Unterordnern. Frag mal Leute mit 'ner großen mp3-Sammlung wie die sich fühlen, wenn Du mit einem Programm leere Ordner aufspüren willst und bei jedem Check erstmal 10 min Kaffeepause angesagt ist. |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 26.08.2008 ▲ |
|
|
|
|
| Besonders wenn erst gar kein Kaffee im Hause ist! |
|
|
| |
|
|
|
| Sicher keine weiteren Massgaben Frank?
Ein Directory ist ein Ordner, also ein Verzeichnis - also nicht gleich jeder beliebige Pfad - und c: ist zwar ein Pfad, aber kein Ordner.
Ein performanter Weg mit XProfan, um festzustellen, ob ein Directory leer ist, koennte demnach die Pruefung sein, ob sich das Verzeichnis loeschen laesst. KompilierenMarkierenSeparieren Eine Ausnahme fuer das root eines Laufwerkes kann da leicht eingebaut werden, ist imho aber nicht die Aufgabe. |
|
|
| |
|
|
|
Jörg Sellmeyer | Löschen, um festzustellen, ob es da ist? Das ist aber der absolute Holzhammer. |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 26.08.2008 ▲ |
|
|
|
|
| Nein, ob es leer ist. Die bisherigen Varianten beanspruchen viel mehr Last, dagegen sind diese Varianten also Presslufthammer. (dann lieber Holzhammer... ) |
|
|
| |
|
|
|
Dieter Zornow | |
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 26.08.2008 ▲ |
|
|
|
|
| Meine Variante ist deshalb Kaese weil sie Schreibrecht erfordert und zudem wohl eine Freigabe sowie andere Attribute entfernt, nun war Dieter eben schneller die Api die ich rauskrahmte zu posten...
Hrm, dennoch: PathIsDirectoryEmpty |
|
|
| |
|
|