Eine bemerkung noch von mir.
In der TSearchRec Struktur sind Win32FindData Handles des
OS gespeichert. Nach einem erfolgreichen FindFirst() sind diese Handles vom
OS korrekt initialisiert.
In einigen Delphiversionen wird durch die
RTL diese Handles aber nicht initialisiert, sie zeigen ins Nirwana. Sollte nun FindFirst() unter dieser
RTL fehlschlagen und nachfolgend FindClose() aufgerufen werden, so greift das
OS auf ungültige Handles zu. Folge: Zugriffsverletzungen in Kernel32.dll.
Fazit: FindClose() nur aufrufen wenn FindFirst() = 0, also
Delphi-Quellcode:
procedure Scan(const Path: String);
var
SR: TSreachRec;
begin
if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
try
repeat
if (SR.Attr and faDirectory <> 0) and
(SR.Name <> '.') and
(SR.Name <> '..') then
begin
// Directory, rekursiver Aufruf hier
Scan(Path + SR.Name + '\');
end else
begin
// Datei, VolumeID etc.
end;
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
end;
Gruß Hagen
[Edit=Sakura]Siehe Hagens nächstes Posting ;-)[/Edit]