Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Schnelle Dateisuche (https://www.delphipraxis.net/106208-schnelle-dateisuche.html)

KrasserChecker 7. Jan 2008 15:33

Re: Schnelle Dateisuche
 
@mashutu:

Du solltest daran denken, noch am Ende der Methode das hier mal aufzurufen, sonst hast Du da ein kleines Speicherleck :warn:
Delphi-Quellcode:
FindClose(sr);
Zitat aus Delphi-Hilfedatei:
Zitat:

Die Prozedur gibt den mit FindFirst zugewiesenen Speicher frei.
FindClose beendet eine FindFirst/FindNext-Aufruffolge.

Christian Seehase 7. Jan 2008 16:08

Re: Schnelle Dateisuche
 
Moin Gerd,

Zitat:

Zitat von norwegen60
ich verwende schon lange folgenden Code um nach Dateien zu suchen.

Dann hast Du auch schon seit langem einen Fehler drin ;-)

Das hier
Delphi-Quellcode:
(search.name[1]<>'.')
ist nämlich schlicht falsch, da Dateien und Ordner durchaus mit einem Punkt beginnen dürfen.
Man muss explizit nach (Search.Name <> '.') and (Search.Name <> '..') suchen.

Warum ist bei Dir eigentlich die Liste als Var-Parameter deklariert.
Das finde ich relativ gefährlich.
Da ja die Ergebnisse an das übergebene Objekt mittels einer Methode des Objektes zugefügt werden sollen, kann man die Liste auch explizit als const deklarieren.

@mashutu:

Delphi-Quellcode:
if sr.Attr and faDirectory >0 then
funktioniert in diesem Zusammenhang zwar, halte ich aber für nicht ungefährlich.
Ein Vergleich auf <> 0 oder auf = faDirectory wäre da sicherer.

Was bezweckst Du eigentlich mit $FF bei FindFirst?
Es ist zumindest kein für diesen Parameter gültiger Wert ;-)

DP-Maintenance 7. Jan 2008 16:09

DP-Maintenance
 
Dieses Thema wurde von "Christian Seehase" von "Windows 9x / ME / 2000 / XP / 2003 / Vista" nach "Object-Pascal / Delphi-Language" verschoben.
Kein OS-Problem

mashutu 8. Jan 2008 10:44

Re: Schnelle Dateisuche
 
[quote="KrasserChecker"]Du solltest daran denken, noch am Ende der Methode das hier mal aufzurufen, sonst hast Du da ein kleines Speicherleck :warn:
Delphi-Quellcode:
FindClose(sr);
Ja, da habe ich mich noch nicht daran gewoehnt, dass man das jetzt braucht ... :-)

himitsu 9. Jan 2008 10:46

Re: Schnelle Dateisuche
 
nicht nur jetzt (das braucht man eigentlich immer.

Nja, aber mal zu der/solchen Funktionen:
ich werwende sowas eigentlich nie, da ich es mir selbst implementier und direkt in der Suchfunktion die Dateibehandlung implementier,
also die gefundenen Dateien sofort beim auffinden behandel.

Es wird also nicht erst eine (womögliche) rießengroße Dateiliste erstellt und erst dann diese abgearbeitet.


ich war aber schon manchmal am Überlegen eine Suchfunktion mit Callback zu nutzen (war dann aber "für mich" meistens nicht nötig)

mit Callback:
Delphi-Quellcode:
Function FindFiles(Cost Dir, FileMask: String; Callback: TSearchCallback;
  Private: Integer; Subdirs: Boolean = False): Boolean;
  // das müßte dann nur noch erstellt werden,
  // so das es den Callback aufruft und mit Suchmasken arbeitet

Function MySearchCallback(Const Dateiname: String; Private: Integer): Boolean;
  Begin
    // Datei behandeln
    Result := True; // weiter Dateien suchen (false=Suche abbrechen)
  End;

Dir     := 'C:\irgendwas\';
FileMask := 'ACA_CDM.DAT|*.~*|*.$*|*.BAK|*.SIK|*.ERR|*.TMP';
FindFiles(Dir, FileMask, MySearchCallback, 0{oder irgendein Wert/Zeiger...,
  welcher an Callback übergeben wird}, True);
ich weiß jetzt nicht, ob's sowas schon fertig gibt,
aber es wäre wohl vom Speicher/Tempo her eine optimale Lösung,
abgesehn von einer direkten Implementation ala wicht(#11)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr.
Seite 2 von 2     12   

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