Donnerstag, 7. August 2008

Einlesen grosser Verzeichnisse ohne ADIR() / Reading large directories without ADIR()

Im UT kam heute die Frage bzgl. des Einlesens von Dateien aus Verzeichnissen mit mehr als 12800 Dateien auf. ADIR() lieferte einen Error 31 - Invalid subscript reference.

U.a. für solche Fälle steht in Foxpro die Funktion SYS(2000, Skeleton [, 1]) zur Verfügung. Mit ihrer Hilfe können Verzeichnisse über eine Verarbeitungsschleife eingelesen werden. Im folgenden ein kleines Beispiel das sämtliche EXE-Dateien aus dem Windowsverzeichnis zur Anzeige bringt.


LOCAL lcCurDir as String, lcWinDir as String, lcFile as String

lcCurDir = FULLPATH(CURDIR())
lcWinDir = GETENV([windir])

CHDIR (lcWinDir)

lcFile = SYS(2000,[*.exe])

IF !EMPTY(lcFile)
  CLEAR
  ?lcFile
  DO WHILE .T.
      lcFile = SYS(2000,[*.exe],1)
      IF !EMPTY(lcFile)
          ?lcFile
      ELSE
          EXIT
      ENDIF
  ENDDO
ENDIF

CHDIR (lcCurDir)
RELEASE lcCurDir, lcWinDir, lcFile

Keine Kommentare:

Kommentar veröffentlichen