AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Neue Version von FindAllFiles

Ein Thema von SirThornberry · begonnen am 11. Jun 2005 · letzter Beitrag vom 5. Jun 2006
Antwort Antwort
Seite 3 von 4     123 4   
Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#21

Re: Neue Version von FindAllFiles

  Alt 13. Jul 2005, 14:16
Zitat von Thanatos81:
Kann es sein, dass du beim letzten Update (mehrere Masken) wieder die Parameter von "Like" vertauscht hast? Bei mir funktionierte deine sehr hilfreiche Funktion leider nicht.

Nachdem ich die Parameter beim Aufruf von Like vertauscht hab, funktioniert es wunderbar.

Aber Hut ab, wirklich eine sehr praktische Funktion!
DITO .. bei mir klappt es auch nur mit Vertauschung ... Trotzdem super Function
龍 Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#22

Re: Neue Version von FindAllFiles

  Alt 13. Jul 2005, 19:45
Ihr habt Recht, ich hatte es schon wieder vertauscht
Hier also jetzt hoffentlich wieder richtig.
Delphi-Quellcode:
procedure FindAllFiles(FileList: TStrings; RootFolder: string; Mask: string = '*'; Recurse: Boolean = True; AddFolderNames: Boolean = False; IgnoreMaskAtFolderNames: Boolean = True);
  procedure LFindAllFiles(AParentFolder: string; AMasks: TStrings);
    function LIsInMasks(AFilename: String): Boolean;
    var LCount: Integer;
    begin
      result := False;
      for LCount := 0 to AMasks.Count - 1 do
      begin
        if Like(AFilename, AMasks.Strings[LCount]) then
        begin
          result := True;
          break;
        end;
      end;
    end;
  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
              (IgnoreMaskAtFolderNames or LIsInMasks(AnsiLowerCase(LSearchRec.Name))) then
              FileList.AddObject(AParentFolder + LSearchRec.Name, TObject(True));
            if Recurse then
              LFindAllFiles(AParentFolder + LSearchRec.Name + '\', AMasks);
          end
          else if LIsInMasks(AnsiLowerCase(LSearchRec.Name)) then
            FileList.AddObject(AParentFolder + LSearchRec.Name, TObject(False));
        end;
      until FindNext(LSearchRec) <> 0;
      FindClose(LSearchRec);
    end;
  end;
var LMasks: TStringList;
begin
  LMasks := TStringList.Create;
  LMasks.Sorted := True;
  LMasks.Duplicates := dupIgnore;
  LMasks.Delimiter := '|';
  LMasks.DelimitedText := AnsiLowerCase(Mask);
  LFindAllFiles(IncludeTrailingPathDelimiter(RootFolder), LMasks);
  LMasks.Free;
end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#23

Re: Neue Version von FindAllFiles

  Alt 14. Jul 2005, 07:22
Hi,

Du könntest doch anstatt der Masken und der Like einfach die MSDN-Library durchsuchenPathMatchSpec von Windows verwenden. Dann kannst Du auch den ; Delimiter von Windows verwenden und musst ihn auch nicht mehr selbst parsen.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#24

Re: Neue Version von FindAllFiles

  Alt 14. Jul 2005, 18:37
ich WILL den Delimter ";" nicht verwenden weil das zum Konfilikt führt wenn in einem Dateinamen ";" vorkommt oder man eben danach sucht. Ich finde es bedeutend sinnvoller einen Delimiter zu verwenden der NICHT in Dateinamen vorkommen kann... - Werd mir die Funktion mal mit anschauen, vielleicht kann man da ja irgendwas mit Delimiter setzen...
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#25

Re: Neue Version von FindAllFiles

  Alt 14. Jul 2005, 18:39
Zitat von SirThornberry:
ich WILL den Delimter ";" nicht verwenden weil das zum Konfilikt führt wenn in einem Dateinamen ";" vorkommt oder man eben danach sucht. Ich finde es bedeutend sinnvoller einen Delimiter zu verwenden der NICHT in Dateinamen vorkommen kann... - Werd mir die Funktion mal mit anschauen, vielleicht kann man da ja irgendwas mit Delimiter setzen...
Hm, ja, verstehe ich, aber der Anwender ist es halt von der Windows-Suche her gewohnt ";" zu verwenden, daher habe ich das vorgeschlagen.
Ich befürchte aber, dass PathMatchSpec wirklich nur den Windows Delimiter ";" erlaubt...

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#26

Re: Neue Version von FindAllFiles

  Alt 14. Jul 2005, 19:09
naja, so wie ich das der hilfe entnommen hab kann ich da nicht mehre Masken verwenden (';') also werd ich da wie bei der Like-Variante das für jede extension einzeln aufrufen und somit spielt der Delimiter keine Rolle. In welcher Delphiunit ist eigentlich die Funktion "PathMatchSpec" defniert?

[Edit]Hat sich erledigt, hab die Funktion selbst eingebunden[/Edit]
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#27

Re: Neue Version von FindAllFiles

  Alt 14. Jul 2005, 19:14
Zitat von SirThornberry:
In welcher Delphiunit ist eigentlich die Funktion "PathMatchSpec" defniert?
Soweit ich weiss in keiner, Du musst sie Dir selbst importieren:

Delphi-Quellcode:
  function PathMatchSpec(pszFile, pszSpec: PAnsiChar): BOOL; stdcall;
    external 'shlwapi.dllname 'PathMatchSpecA';
mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#28

Re: Neue Version von FindAllFiles

  Alt 14. Jul 2005, 19:19
Ich kann die Funktion nicht verwenden da sie wie geahnt bereits den ";" als delimiter zulässt.
Habe ich jetzt allerdings einen Dateinamen "abcdef.txt;.sysa" und suche nach "*.txt*;.sys" so wird mir true zurück gegeben weil "*.txt*" im Dateinamen vorkommt. Das True ist allerdings falsch weil ich ja nur True zurück bekommen will wenn die Datei mit ";.sys" endet was aber nicht der fall ist. (Könnnt mich immer noch drüber aufregen das windows für sowas einen zeischen nimmt welches im Dateinamen zugelassen ist.

Zusammengefasst: Folgender aufruf liefert True zurück obwohl er eigentlich false liefern müsste wenn ich ";" nicht als Delimiter verwenden will.
PathMatchSpecA('abcdef.txt;.sysa', '*.txt*;.sys') @mirage228: Dein Import war fast richtig. Wie bei fast allen Funktionen gibt es aber eine Ascii-Variante und vermutlichd ann auch noch eine Widestring variante - also muss der import so aussehen damit es funktioniert
function PathMatchSpecA(AFilename: PChar; AMask: PChar): Boolean; stdcall external 'shlwapi.dll';
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#29

Re: Neue Version von FindAllFiles

  Alt 14. Jul 2005, 19:24
Zitat von SirThornberry:
@mirage228: Dein Import war fast richtig. Wie bei fast allen Funktionen gibt es aber eine Ascii-Variante und vermutlichd ann auch noch eine Widestring variante - also muss der import so aussehen damit es funktioniert
function PathMatchSpecA(AFilename: PChar; AMask: PChar): Boolean; stdcall external 'shlwapi.dll';
Nein, der Import ist ganz richtig
Schau Dir mal den letzten Abschnitt mit name 'PathMatchSpecA' an

Abgeshen davon hast Du natürlich bezüglich des Delimiters recht. Aber wenn Du die Funktion nur intern im Programm brauchst, um z.B. irgendwelche Erweiterungs-DLLs zu suchen, geht das natürlich auch.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#30

Re: Neue Version von FindAllFiles

  Alt 14. Jul 2005, 19:32
uj, du hast recht, da hab ich mal wieder nicht richtig hingeschaut wie schon so oft bei Dingen aus diesem Thread... Aber schön zu wissen das es von der Api-Seite her da eine Funktion gibt die man für andere Sachen verwenden kann wo der Delimiter nicht so wichtig ist. (Wenn die Begrenzung auf MaxPath nicht wäre und auch der Delimiter nicht könnte man die Funktion noch supi für normale Texte verwenden, aber leider ist dem ja nicht so)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:22 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