![]() |
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 ! |
Re: Prüfen ob ein verzeichnis die gewünschte erweiterungen h
ich habe herrausgefunden warum meine funktion nicht funktionieren kann:
Delphi-Quellcode:
pos gibt immer 0 zurück ich weiß einfach nicht warum AMask sieht z.b. so aus '.M4A.'
if (SR.Name[1]<>'.') and ((sr.Attr or faAnyFile) = faAnyFile) and (pos(ExtractFileExt(sr.name),AMask) > 0)then begin
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 ! |
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
|
Re: Prüfen ob ein verzeichnis die gewünschte erweiterungen h
beide string sind groß geschrieben. :(
|
Re: Prüfen ob ein verzeichnis die gewünschte erweiterungen h
Moin Michael,
Zitat:
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. |
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:
mein ziel ist es das such verzeichnis auch dazustellen und zwar wie gesagt als root !
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 |
Re: Prüfen ob ein verzeichnis die gewünschte erweiterungen h
problem gelöst *G*
ich mache das jetzt so:
Delphi-Quellcode:
die erste procedure stamt vom Delphiforum. Wist ihr vileicht noch wie ich diese procedure optimieren könnte ?
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; 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. |
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