ReadDir unter Linux -> zu viele verzeichnisse?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

UNZ

Betreff: ReadDir unter Linux -> zu viele verzeichnisse?

BeitragDo, Jan 10, 2013 22:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Abend,

ich habe das Gefühl, das Linux (Kubuntu) wohl mein Programm abwürgt, wenn ich in zu vielen Ordnern stöbere.

Hier mal ein kleines Testprog
Code: [AUSKLAPPEN]

SuperStrict

Framework brl.filesystem
Import brl.standardio

Global cntDirs:Int
Global cntFiles:Int

'iterateDir("F:/Spiele/Proggen/Blitzmax/mod")
iterateDir("/home/aas/Proggen/BlitzMax/")
Print "FINISHED"

Function iterateDir(dirpath$)
   
      Local dir:Int
      Local file$
      If FileType(dirpath) <> FILETYPE_DIR
         Return
      EndIf
      
      cntDirs:+ 1
      If cntDirs 'Mod 100=0
         Print "DIR:" + dirpath
         Print "Dirs:" + cntDirs
      EndIf
      
      dir = ReadDir(dirpath)
      Repeat
         file = NextFile(dir)
         If file
            If file <> "." And file <> ".."
               cntFiles:+ 1
               If cntFiles Mod 1000= 0
                  Print "Files:" + cntFiles
               EndIf
               'Print "FILE:" + file
               
               Select FileType(dirpath+"/"+file)
                  Case FILETYPE_DIR
                     iterateDir(dirpath +"/" +file)
               End Select
            EndIf
         EndIf
      Until file = ""
   
End Function


Das Programm geht die Ordner eines Verzeichnises durch und auch deren Unterordner.
Das doofe ist jetzt, das bei ca. 1010 Ordnern 'ne Fehlermeldung kommt.
Auf Windows läuft es aber locker durch.
Das muss besser als perfekt!

UNZ

Betreff: CloseDir()

BeitragDo, Jan 10, 2013 22:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe gerade gut 1std an diesem Problem gesessen und 5min nachdem ich diesen Thread eröffne, als ich den Rechner runterfahre, fällt mir ein, dass man so einen Ordner doch eigentlich auch schließen müsste.

Rechner wieder angemacht, CloseDir() gesucht und gefunden, gestartet und gefreut Smile
Das muss besser als perfekt!

Jan_

Ehemaliger Admin

BeitragFr, Jan 11, 2013 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Weierhin, sollte man mit Recursion aufpassen, irgendwann ist der Stack voll.
between angels and insects
 

PhillipK

BeitragFr, Jan 11, 2013 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Na, das muss aber ein ordentliches durcheinander sein, wenn man mit einer rekursiven ordner-durchwühlsache nen runtimeerror aufgrund des vollen stacks erzeugt.

aber hier isses ja auch noch einfach zu fixen: Einfach eine whileschleife, die eine liste abarbeitet. Stanartmäßig ist nur der erste ordner drinne. Die while läuft an, holt den ordner-string aus der liste und durchsucht diesen. wird ein weiterer ordner gefunden, wird der neue, totale pfad in die liste geschmissen. Bumms, rekursion gelöst, selbes ergebnis. Und das beste: so schön abstrakt schreibbar, das man 2 tage später nichtmehr durchsteigt hihi

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group