Deutsch
Forum

Frage der Woche!

 

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!
 
25.08.2008  
 




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
cls

proc isdirempty

    parameters dir$

    if direxists(dir$)

        if len(dir$) > 3

            clearList
            chdir dir$
            addFiles *"*.*"
            case %GetCount = -1:return 1
            chdir $ProgDir

        else

            return 3

        endif

    else

        return 2

    endif

endproc

Isdirempty "C:"
case %(0) = 0: print "Verzeichnis voll"
case %(0) = 1: print "Verzeichnis leer"
case %(0) = 2: print "Verzeichnis nicht gefunden"
case %(0) = 3: print "Root nicht möglich - bääätsch"
waitinput
 
25.08.2008  
 




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?
 
25.08.2008  
 



Koennen wir uns auf "performantestes Beispiel" einigen?
 
26.08.2008  
 




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!
 
26.08.2008  
 



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.
 
26.08.2008  
 




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... )
 
26.08.2008  
 




Dieter
Zornow

KompilierenMarkierenSeparieren
Def PathIsDirectoryEmpty(1) ! "shlwapi","PathIsDirectoryEmptyA"'gibt 1 für leer 0 für nein

proc isDirEmpty

    parameters dir$
    Return PathIsDirectoryEmpty(addr(dir$))

endproc

 
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
 
26.08.2008  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

25.515 Betrachtungen

Unbenanntvor 0 min.
p.specht22.05.2013
mene06.12.2012
Peter Max Müller11.12.2011
Jens Tiburski29.12.2010
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie