[fpc-pascal] Question on how to avoid memory trouble using FindFirst(), FindNext() and FindClose()

Cox, Stuart TRAN:EX Stuart.Cox at gov.bc.ca
Fri Feb 2 17:52:42 CET 2007


I am trying to EnumerateFiles (create a list of all files that match a
given filespec) across and down a whole drive.  I've directly used the
EnumerateFiles code from TurboPower's SysTools as available on
SourceForge.

The code works just as TurboPower designed and it and my wrapper code
runs find on some drives but fails miserably on the very one that I
would like to use the code on.  As the EnumerateFiles code attempts to
append one more filename to the Tstrings, it throws an exception and
dies from lack of memory.  The trouble is not in the memory used by the
Tstrings to hold the list of found files but, rather, in the way that
memory fragmentation occurs during the FindFirst(), FindNext() and
FindClose() calls.  This can be verified by eliminating the storage of
anything in the Tstrings list at all.  The routine will still die and in
the same place and at the same filename.

The error is not from a lack of stack space, either.  The error is
EOutOfMemory that indicates a less easily solved problem.

Can anyone recommend a method to search a whole drive, of arbitrary
size, without running out of memory.

Stu Cox



More information about the fpc-pascal mailing list