Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit FindNext und FindClose (https://www.delphipraxis.net/41371-problem-mit-findnext-und-findclose.html)

manuel 2. Mär 2005 14:26


Problem mit FindNext und FindClose
 
Hi Leute,

in einem Thread-Objekt habe ich eine Funktion implementiert, die die Gesamtgrösse eines Verzeichnisbaumes und die Namen der darin enthaltenen Dateien in TStringlists einfügt.

Delphi-Quellcode:
filesize_total:Integer;
destinationdir: String;
FilesToCopy, DirectoriesToCreate:TStringlist;
SizeOfFiles:TStringlist;


function ThreadCopy.getDirectoriesFiles(startDirectory:string):longint;
//Bestimmt Verzeichnisse und Dateien
var SR     : TSearchRec;
    Groesse : longint;
    Verzeichnis:String;
begin
  Verzeichnis:=startDirectory;
  Groesse:=0;
  DirectoriesToCreate.Add(Verzeichnis);
  if Verzeichnis[length(Verzeichnis)]<>'\' then
    Verzeichnis:=Verzeichnis+'\';
  if FindFirst(Verzeichnis+'*.*',$3F,SR)=0 then begin
    repeat
      if ((SR.Attr and faDirectory)>0) and (SR.Name<>'.') and (SR.Name<>'..') then
      //Verzeichnis erkannt
      begin
        //Rekursiver Funktionsaufruf
        Groesse:=Groesse+getDirectoriesFiles(Verzeichnis+SR.Name);
        if (SR.Name<>'.') and (SR.Name<>'..') then
        begin
          if DirectoriesToCreate.IndexOf(Verzeichnis+SR.Name) = -1 then
          //Falls Eintrag in Liste noch nicht vorhanden, Eintrag hinzufügen
          DirectoriesToCreate.Add(Verzeichnis+SR.Name);
        end;
      end
      else
      begin
        //Datei erkannt
        SizeOfFiles.Add(IntToStr(SR.Size));
        Groesse:=Groesse+SR.Size;
        if (SR.Name<>'.') and (SR.Name<>'..') then
        begin
          //Falls Eintrag in Liste noch nicht vorhanden, Eintrag hinzufügen
          if FilesToCopy.IndexOf(Verzeichnis+SR.Name) = -1 then FilesToCopy.Add(Verzeichnis+SR.Name);
        end
      end;
    until FindNext(SR)<>0;
    FindClose(SR);
  end;
Bei der FindCLose(SR) in der vorletzen Zeile erhalte ich die Meldung
"Incompatible Types: Cardinal und TSearchRec".

Wo liegt der Fehler?

Baue ich genau den gleichen Quelltext in einen anderen Thread ein funktionierts problemlos :?:

Hat vielleicht jemand eine Idee?


Gruß
Manuel

s14 2. Mär 2005 14:27

Re: Problem mit FindNext und FindClose
 
Versuch mal

Delphi-Quellcode:
SysUtils.FindClose(sr);

manuel 2. Mär 2005 14:40

Re: Problem mit FindNext und FindClose
 
Jetzt bin ich platt... :wall:

die unit ist definitif eingebunden...
aber so gehts...

Danke... :thumb:

alcaeus 2. Mär 2005 14:41

Re: Problem mit FindNext und FindClose
 
Hallo manuel,

du hast in deinem Thread eine FUnktion namens FindClose, welche die Funktion aus SysUtils "überschreibt". Dass die Unit eingebunden ist, ist klar. Mit dem "SysUtils." sagst du dem Compiler nur, dass er in der Unit SysUtils nachsehen soll, ob es dort eine entsprechende Funktion gibt, anstatt sich die Unit-Hierarchie hochzuarbeiten.

Greetz
alcaeus

Christian Seehase 2. Mär 2005 16:59

Re: Problem mit FindNext und FindClose
 
Moin Manuel,

Du könntest auch, als weitere Variante, die Reihenfolge der Windows und der SysUtils unter Uses vertauschen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz