Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ungeordnet, in Reihenfolge Dateien suchen und anzeigen (https://www.delphipraxis.net/47441-ungeordnet-reihenfolge-dateien-suchen-und-anzeigen.html)

Nogge 11. Jun 2005 07:57


ungeordnet, in Reihenfolge Dateien suchen und anzeigen
 
Hallo Community,
Ich möchte gern z.B. mithilfe der Funktion FindAllFiles aus DP Dateien anzeigenlassen, die aber nicht geordnet werden sollen. Mir ist es wichtig, dass sie in der Reihenfolge wie im Explorer dargestellt werden. Ich habe keine Ahnung, wie ich das machen soll.
Plz Help Me^^

SirThornberry 11. Jun 2005 08:17

Re: ungeordnet, in Reihenfolge Dateien suchen und anzeigen
 
du willst dateien aus der dp anzeigen lassen? Hast du die dateien bereits heruntergeladen oder willst du direkt aus dem internet die anzeigen lassen?

Sharky 11. Jun 2005 08:23

Re: ungeordnet, in Reihenfolge Dateien suchen und anzeigen
 
Zitat:

Zitat von SirThornberry
du willst dateien aus der dp anzeigen lassen?..

Hai SirThornberry,

ich denke er meint die Funktion FinAllFiles aus der Code-Library.

Werden die dort denn in irgendeiner Art sortiert? :gruebel:

SirThornberry 11. Jun 2005 08:27

Re: ungeordnet, in Reihenfolge Dateien suchen und anzeigen
 
ups, da hab ich wohl durch das fehlende komma das ganze falsch interpretiert. ich dachte er will mit hilfe der funktion findallfiles alle dateien aus der dp anzeigen, wenn man das allerdings anders liest meint er wohl die funktion findallfiles aus der dp-codelib...

die Funktion sortiert die dateien nur indirekt. Die Sortierung übernimmt bereits das Betriebssystem. Unter win98/win95 würde diese funktion die dateien unsortiert zurück liefern, unter xp sind die dateien aus irgend einem grund schon sortiert (wohl durchs betriebssystem).

Anmerken möchte ich jedoch noch das die funktion nicht die perfomanteste ist da pro verzeichnis 2 mal findFirst->FindNext aufgerufen wird anstelle den aufruf nur einmal abzusetzen und dann selbst den Filter anzuwenden.

Nogge 11. Jun 2005 10:34

Re: ungeordnet, in Reihenfolge Dateien suchen und anzeigen
 
Ich bin offen für Neues^^ Haste denn ne bessere Funktion parat?
(Beim nächsten Mal setz' ich wieder Kommas, sry^^)
Ja, wie kann man denn nun eine unsortierte Fassung des Ganzes bekommen?

SirThornberry 11. Jun 2005 10:40

Re: ungeordnet, in Reihenfolge Dateien suchen und anzeigen
 
eine unsortierte gibt es so nicht, einzige möglichkeit wäre dann das du das Ergebnis wieder mischst (shuffle). Was stört dich daran das die ergebnisse sortiert sind?

Bessere Lösung: Anstelle 2 mal findFirst->FindNext aufzurufen reicht einmal, und dann das Ergebnis mit "like" auf die Maske prüfen (da gibts ne unit in der Delphifundgrube)
http://www.delphi-fundgrube.de/files/like.txt

Bevor jetzt die Frage kommt warum man sich selbst die Arbeit des Filterns machen soll anstelle einfach per FindFirst den Filter zu setzen mit einer zweiten Abfrage: Festplattenzugriffe sind so ziemlich das langsamste was es bei den heitigen rechnern gibt.

Nogge 11. Jun 2005 10:47

Re: ungeordnet, in Reihenfolge Dateien suchen und anzeigen
 
Ich möchte keine weitere uses haben...Da ist doch dann nur wieder sehr viel Müll drin, wovon ich nur eine Sachen wirklich brauche...oder nicht?
Ich möchte die Ordner- und Dateistruktur von meinem Desktop nachm Formatieren beibehalten und amche deswegen vor einer Neuinstallation von Windows ein Backup mit meinem eigenen Tool.

SirThornberry 11. Jun 2005 10:50

Re: ungeordnet, in Reihenfolge Dateien suchen und anzeigen
 
in dieser unit ist nix weiter drin als der algorythmus (funktion). In der Delphifundgrube wird es so bezeichnet:
Zitat:

Strings mit Wildcards (*,?) suchen
und nix weiter ist in der unit enthalten. Letztendlich ist es jedoch dir überlassen ob du eine datei mehr in die uses aufnimmst oder lieber 2 mal die dateien/ordner von der festplatte auflisten lässt.
Wenn unter XP eine Abfrage durchgeführt wurde (also ein directorylisting) wird dieses auch gecacht, jedoch weiß ich nicht ob das caching auch wirkt wenn man mit einer anderen maske erneut ein listing durchführt. Unter Win98 ist es auf jeden fall so das kein caching durchgeführt wird und somit dauert das auflisten auch mindestens doppelt so lang wenn man 2 mal den gleichen ordner abfragt.

Nogge 11. Jun 2005 10:57

Re: ungeordnet, in Reihenfolge Dateien suchen und anzeigen
 
Jo, habe mir den Link auch gerade angeschaut (war der schon immer da oder haste den noch bearbeitet?^^).
Wenn es allerdings keine wirkliche Möglichkeit gibt, Dateien in der strukturellen Reihenfolge anzeigenzulassen, dann schließe ich den Thread jetzt. Trotzdem danke für den Hinweis auf das Performance-lag, SirThornberry.

SirThornberry 11. Jun 2005 11:21

Re: ungeordnet, in Reihenfolge Dateien suchen und anzeigen
 
den Link hab ich im Nachhinein erst eingefügt weil er nicht so leicht zu finden ist. Hab die Funktion mal versucht etwas zu optimieren (findallFiles).

Dabei hab ich eine InlineProcedure verwendet damit nicht bei jedem rekursiven Aufruf
"IncludeTrailingPathDelimiter" erneut aufgerufen wird.
Desweiteren hab ich einen weiteren Parameter hinzugefügt mit dem man auch angeben kann ob die
Verzeichnisnamen mit aufgelistet werden (macht ja manchmal sinn wenn man den Ordnerinhalt sehen will, wie im TotalCommander etc.)
In diesem Zusammenhang wird im Property Object auch mit gespeichert ob das Item ein Ordner ist oder nicht. Somit kann man später bei der Darstellung des Inhaltes Ordner und Dateien verschieden kennzeischnen.

Delphi-Quellcode:
procedure FindAllFiles(FileList: TStrings; RootFolder: string; Mask: string ='*'; Recurse: Boolean = True; AddFolderNames: Boolean = False);
  procedure LFindAllFiles(AParentFolder: String);
  var LSearchRec: TSearchRec;
  begin
    if FindFirst(AParentFolder + '*', faAnyFile, LSearchRec) = 0 then
    begin
      repeat
        if (LSearchRec.Name <> '.') and (LSearchRec.Name <> '..') then
        begin
          if LSearchRec.Attr and faDirectory = faDirectory then
          begin
            if AddFolderNames and Like(Mask, AnsiLowerCase(LSearchRec.Name)) then
              FileList.AddObject(AParentFolder + LSearchRec.Name, TObject(True));
            if Recurse then
              FindAllFiles(FileList, AParentFolder + LSearchRec.Name + '\');
          end
          else if Like(Mask, AnsiLowerCase(LSearchRec.Name)) then
            FileList.AddObject(AParentFolder + LSearchRec.Name, TObject(False));
        end;
      until FindNext(LSearchRec) <> 0;
      FindClose(LSearchRec);
    end;
  end;
begin
  Mask := AnsiLowerCase(Mask);
  LFindAllFiles(IncludeTrailingPathDelimiter(RootFolder));
end;


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