Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Nach Dateien in einem Ordner Suchen (https://www.delphipraxis.net/204760-nach-dateien-einem-ordner-suchen.html)

kagi3624 26. Jun 2020 14:10

Delphi-Version: 6

Nach Dateien in einem Ordner Suchen
 
Hallo, ich möchte einen Ordner nach allen Dateien durchsuchen und mit denen irgendwas machen. Dafür habe ich eine Funktion zusammengegoogelt und die macht eigentlich auch, was ich möchte.

Code:
procedure TForm1.SearchFiles(filepath: string);
var
  MySearch: TSearchRec;
  FindResult: Integer;
begin
  FindResult:=FindFirst(filepath+'\*.*', faAnyFile, MySearch);
  if (MySearch.Name<>'.')and(MySearch.Name<>'..') then begin
    Memo1.Lines.Add(MySearch.Name);
    prepareFile(filepath, MySearch.Name, true);
  end;
  while FindNext(MySearch)=0 do
  begin
    if (MySearch.Attr<>faDirectory) and (MySearch.Name<>'.') and (MySearch.Name<>'..') then begin
      Memo1.Lines.Add(MySearch.Name);
      prepareFile(filepath, MySearch.Name, true);
    end;
  end;
end;
Allerdings meckert delphi

Code:
[Hinweis] meeh.pas(85): Auf 'FindResult' zugewiesener Wert wird niemals benutzt
Die Zeile kann ich auch nicht ausblenden, dann funktioniert es nicht mehr. Kann ich den Hinweis irgendwie beheben oder einfach ignorieren? Danke!

Der schöne Günther 26. Jun 2020 14:25

AW: Nach Dateien in einem Ordner Suchen
 
Der Compiler sagt dass die Zuweisung an die Variable "FindResult" (und damit die gesamte Variable) überflüssig ist, nicht die gesamte Zeile!

Achim Kalwa 26. Jun 2020 14:27

AW: Nach Dateien in einem Ordner Suchen
 
Zitat:

Zitat von kagi3624 (Beitrag 1468257)
Code:
[Hinweis] meeh.pas(85): Auf 'FindResult' zugewiesener Wert wird niemals benutzt
Die Zeile kann ich auch nicht ausblenden, dann funktioniert es nicht mehr. Kann ich den Hinweis irgendwie beheben oder einfach ignorieren? Danke!

Der Compiler hat Recht. Der Inhalt von FindResult zeigt an, ob die Suche mittels FindFirst erfolgreich war oder nicht. Und weil Du diesen Wert nicht prüfst, meckert der Compiler.

Besser wäre folgender Code:
Code:
var
  MySearch: TSearchRec;
  FindResult: Integer;
begin
  FindResult := FindFirst(filepath+'\*.*', faAnyFile, MySearch);
  while FindResult = 0 do
  begin
    if (MySearch.Name<>'.')and(MySearch.Name<>'..') then begin
      Memo1.Lines.Add(MySearch.Name);
      prepareFile(filepath, MySearch.Name, true);
    end;

    FindResult := FindNext(MySearch);
  end;
  FindClose(MySearch);
end;
FindResult wird jetzt bei jedem Schleifendurchgang ausgewertet. Sobald der Wert von 0 abweicht, wird die Schleife beendet. Wichtig ist auch das FindClose(), damit werden intern verwendete Daten korrekt freigegben (hier: ein Handle).

himitsu 26. Jun 2020 16:33

AW: Nach Dateien in einem Ordner Suchen
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1468259)
Der Compiler sagt dass die Zuweisung an die Variable "FindResult" (und damit die gesamte Variable) überflüssig ist, nicht die gesamte Zeile!

Per se ist die Antwort richtig, aus Sicht des Compilers,
aber im Grunde wird damit auch gesagt, dass der Entwickler vergessen hat diese Variable zu benutzen,
also das Ergebnis der Suche auszuwerten, ob überhaupt was gefunden wurde. (siehe mein Vorredner)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:05 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