Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#11
  Alt 27. Jun 2003, 12:29
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]
  Mit Zitat antworten Zitat