Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Prüfen ob ein verzeichnis die gewünschte erweiterungen hat ? (https://www.delphipraxis.net/79049-pruefen-ob-ein-verzeichnis-die-gewuenschte-erweiterungen-hat.html)

mimi 15. Okt 2006 18:22

Re: Prüfen ob ein verzeichnis die gewünschte erweiterungen h
 
danke für das beispiel... einige eigenschaften von TStrings kannte ich noch nicht. aber ich weiß im moment noch nicht wie mir das in meinem problem weiter helfen könnte.
Naja dann versuche ich mein problem mal zu lösen das muss ja irgenwie machbar sein was ich gerne möchte !

mimi 15. Okt 2006 18:41

Re: Prüfen ob ein verzeichnis die gewünschte erweiterungen h
 
ich habe herrausgefunden warum meine funktion nicht funktionieren kann:
Delphi-Quellcode:
      if (SR.Name[1]<>'.') and ((sr.Attr or faAnyFile) = faAnyFile) and (pos(ExtractFileExt(sr.name),AMask) > 0)then begin
pos gibt immer 0 zurück ich weiß einfach nicht warum AMask sieht z.b. so aus '.M4A.'
edit1:
in der hilfe steht doch drin das pos groß klein schreibung nicht beachten aber es beachtes sie trozdem

aber es läuft immer noch nicht so wie ich es mir vorgestellt habe das suchverzeichnis wird nicht als root knoten angezeigt die filter funktion funktioniert anscheind !

Christian Seehase 15. Okt 2006 18:43

Re: Prüfen ob ein verzeichnis die gewünschte erweiterungen h
 
Moin Michael,

deshalb sagte ich ja, dass Du auf Nummer sicher gehen, und bei beiden Teilen von Pos UpperCase verwenden sollst:;-)

Delphi-Quellcode:
pos(AnsiUpperCase(ExtractFileExt(sr.name)),AnsiUpperCase(AMask)) > 0

mimi 15. Okt 2006 18:44

Re: Prüfen ob ein verzeichnis die gewünschte erweiterungen h
 
beide string sind groß geschrieben. :(

Christian Seehase 15. Okt 2006 18:51

Re: Prüfen ob ein verzeichnis die gewünschte erweiterungen h
 
Moin Michael,

Zitat:

Zitat von mimi
n der hilfe steht doch drin das pos groß klein schreibung nicht beachten aber es beachtes sie trozdem

Das dürfte ein Fehler in der deutschen Hilfe sein.
In der englischen stimmt's.

Wenn in AMask '.M4A.' steht, und in sr.Name 'Dateiname.M4A', dann kann der Pos-Ausdruck nur 1 liefern.
Am besten Du prüfst noch einmal genau den Inhalt won sr.Name.

mimi 15. Okt 2006 18:58

Re: Prüfen ob ein verzeichnis die gewünschte erweiterungen h
 
das habe ich schon gemacht im debugger.... mein problem ist jetzt wo anders:
Delphi-Quellcode:
procedure TPlaylisten.LoadDir(dir:String; var t:Boolean);
var
  search: TSearchRec;
  directory: string;
  sl:TStringList;
  count:Integer;
begin
  directory := ExtractFilePath(dir);
  t:=GetAnderDir(dir,stdext,faAnyFile or faDirectory );
  // Hier*
  if (t) or (GetFilesInDirectory(dir,stdext,true)) then begin
    if Assigned(onPlaylisteAdd) then
    onPlaylisteAdd(directory ,GetPrvDir(directory));
  end;

  // find all files oder Hier*
  // damit auch verzeichnise eingelesen werden die keine unterverzeichnise enhalten oder
  if (isAnder = False) and (GetFilesInDirectory(dir,stdext,true) = True) then begin
    if Assigned(onPlaylisteAdd) then
    onPlaylisteAdd(directory ,GetPrvDir(directory));
  end;

  if FindFirst(directory + '*.*', $23, search) = 0 then begin
    repeat
      if pos(uppercase(ExtractFileExt(search.name)),stdext) > 0 then begin
        if Assigned(onAddItem) then
          onAddItem(directory + search.Name,search.Name);
      end;
    until FindNext(search) <> 0;
  end;

  // Subdirectories/ Unterverzeichnisse
  if FindFirst(directory + '*.', faDirectory, search) = 0 then begin
    repeat
      if ((search.Attr and faDirectory) = faDirectory) and (search.Name[1] <> '.') then begin
        isAnder:=True;
        if t = False then
        if (Assigned(onPlaylisteAdd)) and (GetFilesInDirectory(dir,stdext,true)) then onPlaylisteAdd(directory + search.Name,search.Name);
        LoadDir(directory + search.Name + '\',t);
        isAnder:=False;
      end;
    until FindNext(search) <> 0;
    FindClose(search);
  end;
  //if t = false then
  if Assigned(onplaylistnewadd) then onplaylistnewadd(GetAnderDir(directory + search.Name + '\',stdext,faDirectory));
end; // LoadDir
mein ziel ist es das such verzeichnis auch dazustellen und zwar wie gesagt als root !

mimi 16. Okt 2006 10:42

Re: Prüfen ob ein verzeichnis die gewünschte erweiterungen h
 
problem gelöst *G*
ich mache das jetzt so:
Delphi-Quellcode:
procedure GetAllFilesM(Path, Mask: String; List: TStrings;
  SubFolder: Boolean);
var
  Attrib, k: Integer;
  Search: TSearchRec;
begin
  Attrib := faArchive + faReadOnly + faHidden;

  if Path[Length(Path)] <> '\' then Path := Path + '\';

  with TStringList.Create do
  try
    QuoteChar:='.';
//    CommaText := Mask;
    DelimitedText:= Mask;
    for k := 0 to Count - 1 do
    if FindFirst(Path + Strings[k], Attrib, Search) = 0 then
      repeat
        List.Add(AnsiUpperCase(Path + Search.Name));
      until FindNext(Search) <> 0;

    FindClose(Search);
  finally Free end;

  if SubFolder then
  begin
    if FindFirst(Path + '*.*', faDirectory, Search) = 0 then
    begin
      repeat
        if ((Search.Attr and faDirectory) = faDirectory) and
          (Search.Name[1] <> '.') then
          GetAllFilesM(Path + Search.Name, Mask, List, SubFolder);
      until FindNext(Search) <> 0;

      FindClose(Search);
    end;
  end;
end; {Popov}

function GetFilesInDirectory(ADirectory: string; AMask: String; ARekursiv: Boolean):Boolean;
var
  extList:TStringList;
begin
  extList:=TStringList.Create;
  AMask:=StringReplace(aMask,'.',',*.',[rfReplaceAll   ]);
  Delete(amask,1,1);

// Amask
  GetAllFilesM(ADirectory,amask,extlist,ARekursiv);
//  ShowMessage(extlist.text);

 if extlist.count > 0 then
    result:=true
  else
    result:=False;
end;
die erste procedure stamt vom Delphiforum. Wist ihr vileicht noch wie ich diese procedure optimieren könnte ?
ich glaube mein fehler war: das sich die procedure immer selbst aufgerufen hat. ich glaube folgendes:
er endeckt ein verzeichnis ruft sich slebst auf und kerht zum ersten aufruf zurück und gibt dort natürlich false zurück beim zweiten aufruf wird nämlich true zurückgeben aber das wird aus irgenein grund nicht beachtet. habe ja test gemacht. Naja.... vielen dank für die vorschläge.

Eine frage hätte ich noch zur der TFileListbox variante: wie bekommt man die rekusiv ?
weil das ist ja die einfachste such funktion von allen.
ich müste ja schauen ob es sich um ein verzeichnis oder eine datei handelt. bei einem verzeichnis muss sie sich selsbt aufrufen(auch wenn ich damit in den letzten tagen schlächte erfahrung gemacht habe)


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