AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Wo soll bitte das FindClose(SR) stehen
Thema durchsuchen
Ansicht
Themen-Optionen

Wo soll bitte das FindClose(SR) stehen

Ein Thema von ter · begonnen am 5. Jul 2019 · letzter Beitrag vom 6. Jul 2019
Antwort Antwort
ter

Registriert seit: 26. Aug 2017
17 Beiträge
 
Delphi 6 Personal
 
#1

Wo soll bitte das FindClose(SR) stehen

  Alt 5. Jul 2019, 16:49
Frage:
Wo sollte das "FindClose(SR)" stehen?
An Stelle (1) oder Stelle (2)?

Lese von einem Startverzeichnis "myDrivePath" alle gefundenen
Verzeichnisse und Dateien in eine ListBox "myListBox".
Delphi-Quellcode:
procedure TForm1._update(myDrivePath: s_250;
                         out myListBox: TListBox;
                         var retCntDirs,
                             retCntFiles : integer;
                         var retTotalBytes : cardinal);
{-} procedure _readDP(myDP: s_250);
    var SR : TSearchRec;
    begin
    if (FindFirst(myDP+'*.*', faANYFILE, SR) = 0) then begin
       repeat if ((SR.Attr and faDirectory) = faDirectory) then begin
                 {-found a dir, skip dirnames "." and ".."-}
                 if ((SR.Name = '.') or (SR.Name = '..')) then else begin
                    inc(retCntDirs);
                    myListBox.Items.Add(myDP+SR.Name+'\');
                    _readDP(myDP+SR.Name+'\');
                 end;
              end else begin
                 {-found a file-}
                 inc(retCntFiles);
                 retTotalBytes:=retTotalBytes+SR.Size;
                 myListBox.Items.Add(myDP+SR.Name);
              end;
       until (FindNext(SR) <> 0);
       {-1-} FindClose(SR);
    end;
    {-2-} FindClose(SR);
{-} end;
begin
myListBox.Items.Clear;
myListBox.Items.BeginUpdate;
if (AnsiLastChar(myDrivePath) <> '\') then myDrivePath:=myDrivePath+'\';
retCntDirs:=0; retCntFiles:=0; retTotalBytes:=0;
_readDP(myDrivePath);
myListBox.Items.EndUpdate;
end;
Gruss Terence
Terence Coman
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#2

AW: Wo soll bitte das FindClose(SR) stehen

  Alt 5. Jul 2019, 17:04
Am besten so
Delphi-Quellcode:
var SR : TSearchRec;
begin
  if (FindFirst('*.*', faANYFILE, SR) = 0) then
  try
    repeat
      [...]
    until (FindNext(SR) <> 0);
  finally
    FindClose(SR);
  end;
end;
FindFirst kann diese Suche öffnen, und wenn diese Suche geöffnet wurde, dann muss diese auch wieder geschlossen werden.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.623 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Wo soll bitte das FindClose(SR) stehen

  Alt 5. Jul 2019, 17:16
Frage:
Wo sollte das "FindClose(SR)" stehen?
An Stelle (1) oder Stelle (2)?
Delphi-Quellcode:
    if (FindFirst(myDP+'*.*', faANYFILE, SR) = 0) then begin
       repeat
       until (FindNext(SR) <> 0);
       {-1-} FindClose(SR);
    end;
    {-2-} FindClose(SR);
FindClose gibt die Ressourcen frei, die ein erfolgreiches FindFirst belegt hat. D.h. ein nicht erfolgreiches FindFirst belegt keine Ressourcen, die freigegeben werden muessen.

-> Stelle 1

Und wie Schokohase schon schreibt: Am besten mit Try .. Finally.
Thomas Mueller
  Mit Zitat antworten Zitat
ter

Registriert seit: 26. Aug 2017
17 Beiträge
 
Delphi 6 Personal
 
#4

AW: Wo soll bitte das FindClose(SR) stehen

  Alt 6. Jul 2019, 10:08
Genial, jetzt weis ich bescheid.
Das mit dem Try .. Finally werde
ich jetzt immer machen.
Mit freundlichen Gruessen,
Terence
Terence Coman
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Wo soll bitte das FindClose(SR) stehen

  Alt 6. Jul 2019, 10:35
Das nützt aber nur was, wenn die Routinen auch Exceptions werfen. API Funktionen tuen das zum Beispiel nicht. Die liefern nur einen Fehlercode, den man auswerten muss.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.623 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Wo soll bitte das FindClose(SR) stehen

  Alt 6. Jul 2019, 11:51
Das nützt aber nur was, wenn die Routinen auch Exceptions werfen. API Funktionen tuen das zum Beispiel nicht. Die liefern nur einen Fehlercode, den man auswerten muss.
Das ist egal, denn der Finally-Block wird auch ausgeführt, wenn der Code ganz normal durchlaufen wird.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Wo soll bitte das FindClose(SR) stehen

  Alt 6. Jul 2019, 12:37
Iiiicks. Ich hatte einen reinen Except-Block im Kopf.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz