Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Suchmaske nach FindFirst verändern? (https://www.delphipraxis.net/143694-suchmaske-nach-findfirst-veraendern.html)

PeterPanino 21. Nov 2009 03:52


Suchmaske nach FindFirst verändern?
 
Hallo, weiß jemand wie man NACH FindFirst die Suchmaske verändern kann, sodass FindNext dann diese veränderte Suchmaske verwendet?

jaenicke 21. Nov 2009 04:56

Re: Suchmaske nach FindFirst verändern?
 
Ganz einfach: Es ist nicht möglich.

Wie auch? Ich meine zuerst holst du mit FindFirst eine Liste von passenden Dateien, die du dann mit FindNext durchgehen kannst. Und dann willst du eine neue Suche mit einer neuen Liste starten, nur mit der alten Liste von Dateien. :pale:

PeterPanino 21. Nov 2009 12:39

Re: Suchmaske nach FindFirst verändern?
 
Zitat:

Zitat von jaenicke
zuerst holst du mit FindFirst eine Liste von passenden Dateien, die du dann mit FindNext durchgehen kannst.

Eine Liste von passenden Dateien? :gruebel: Ich dachte immer, FindFirst findet einfach nur die erste Datei im betr. Verzeichnis (und FindNext die jeweils nächste) und schreibt deren Eigenschaften in den SearchRecord? Wo soll denn diese Liste von gefundenen passenden Dateien sein?

himitsu 21. Nov 2009 12:51

Re: Suchmaske nach FindFirst verändern?
 
FindFirst initialisiert die Suche und stellt quasi intern eine Dateiliste zusammen
und es liefert auch gleich das erste Suchergebnis.
FindNext liefert dann sozusagen die nächste Datei aus dieser Liste.

PeterPanino 21. Nov 2009 13:10

Re: Suchmaske nach FindFirst verändern?
 
Ja, aber irgendwo muss dann diese "Liste von gefundenen passenden Dateien" sich doch befinden - in einem anderen Universum?

Mithrandir 21. Nov 2009 13:13

Re: Suchmaske nach FindFirst verändern?
 
Kann das sein, dass du eine Auswahl von Dateien suchen möchtest, und diese dann nochmal filtern möchtest? Warum prüfst du dann nicht nach jedem FindNext, ob die Datei deinem neuen Muster entspricht? Oder, was hindert dich daran, das Muster schon am Anfang zu nutzen?

PeterPanino 21. Nov 2009 13:21

Re: Suchmaske nach FindFirst verändern?
 
Nein, ich möchte u.a. herausfinden, wie FindFirst und Findnext WIRKLICH funktionieren.

Wenn FindFirst wirklich wie oben behauptet eine "Liste der passenden Dateien" erstellt, dann müsste:

1. FindFirst in einem Verzeichnis mit sehr vielen Dateien (z.B. 100.000) erheblich langsamer sein als in einem Verzeichnis mit z.B. nur 3 Dateien, was nach meiner Erfahrung nicht zutrifft,

2. diese Liste sich irgendwo in unserem Universum befinden.

Mithrandir 21. Nov 2009 13:29

Re: Suchmaske nach FindFirst verändern?
 
Also:

FindFirst erstellt ein SearchHandle, und listet die erste Datei auf, die Windows findet, die zu den Parametern passt. FindNext nutzt dann diese Handle, und findet die nächste Datei, die eben genau zu diesem Handle passt. Und ja, je mehr Dateien vorhanden sind, umso länger dauert das. Ist das bei dir nicht der Fall, dann hat der Cache zugeschlagen.

Interessant dazu auch die Remarks-Sektionen der MSDN-Einträge zu FindNextFile und FindFirstFile.

Das hat nix mit dem Universum zu tun. Sollte dir aber klar sein.

//Edit: Wobei man hier "länger" vielleicht noch genauer definieren sollte. ;)

PeterPanino 21. Nov 2009 16:03

Re: Suchmaske nach FindFirst verändern?
 
Zitat:

Zitat von Daniel G
Das hat nix mit dem Universum zu tun. Sollte dir aber klar sein.

Natürlich hat das was mit dem Universum zu tun. Damit wollte ich ausdrücken, dass wenn es wirklich irgendwo die besagte Liste geben sollte, diese auch auffindbar sein sollte. Dazu gibt es ja ein WinAPI. Wenn aber FindFirst nach deiner Aussage keine solche Liste erstellt, sondern nur "die erste Datei auflistet, die Windows findet", dann dauert die Suche mit FindFirst in einem Verzeichnis mit sehr vielen Dateien zwar "etwas länger", aber nicht deswegen weil eine Liste mit den gefundenen Dateien vorab erstellt wird.

So wie ich die Sache jetzt sehe, beauftragt FindFirst Windows mit der Suche und erhält von Windows:

1. ein Such-Ergebnis zurück, das im SearchRecord gespeichert wird, und

2. ein Handle auf eben diese von Windows erstellte/durchgeführte Suche (das ebenfalls im SearchRecord gespeichert wird), das dann FindNext (über SearchRecord) übergeben werden kann.

Ergebnis: Die Suche wird von Windows durchgeführt und die Parameter einer einmal durchgeführten/erstellten Suche können nicht mehr über die WinAPI beeinflusst werden. Könnte man das so stehen lassen?

himitsu 21. Nov 2009 16:10

Re: Suchmaske nach FindFirst verändern?
 
Zitat:

Zitat von PeterPanino
Könnte man das so stehen lassen?

Ja,

es sei denn, man geht direkt auf die grundlegenden und undokumentierten WinAPI's los,
denn da wird quasi jedesmal in FindNext die Suchmaske auf die nächsten Dateien angewendet, bis eine passende Datei gefunden wird und diese wird dann zurückgegeben.

Aber diese interen APIs können sich auch mal ändern, und dann geht es z.B. mit der nächsten Windowsversion nicht mehr und da undokumentiert, gibt es fast keine, welche wissen, wie man diese AOIs aktuell nutzt.


Was aber möglich ist: alles liefern lassen und dann selber filtern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:25 Uhr.
Seite 1 von 6  1 23     Letzte »    

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