![]() |
Bilddateien herausfinden
Hallo,
Delphi-Quellcode:
Ist das so richtig, um Bildformate aus einem Ordner heraus zu filtern?
const
GRAPHTYPES = '.JPG.JPEG.BMP.DIB.TIF.TIFF.PNG.GIF.ICO.EMF.HEIF.HEIC'; Find := GRAPHTYPES; ... if Pos(UpperCase(ExtractFileExt(SR.Name)), Find) > 0 then begin//nur Bilder; Ich sehe schon, mit TDirectory.GetFiles lässt sich das vereinfachen!!! Gruß Willie. |
AW: Bilddateien herausfinden
Erstmal was Grundsärtliches:
Delphi-Quellcode:
Und nein, es sei denn du willst auch z.B. das ".H" im ".HEI" finden.
const
GRAPHTYPES = '.JPG.JPEG.BMP.DIB.TIF.TIFF.PNG.GIF.ICO.EMF.HEIF.HEIC'; if Pos(UpperCase(ExtractFileExt(SR.Name)), GRAPHTYPES) > 0 then // ContainsStr oder ContainsText statt POS (Achtung, die Parameter sind hier andersrum ... k.A. wer auf diese saudämliche Idee kam) // und "Text" hat das Upper/Lower schon eingebaut if ContainsText(GRAPHTYPES, ExtractFileExt(SR.Name)) then
Delphi-Quellcode:
const GRAPHTYPES = '*.JPG*.JPEG*.BMP*.DIB*.TIF*.TIFF*.PNG*.GIF*.ICO*.EMF*.HEIF*.HEIC*';
if ContainsText(GRAPHTYPES, '*' + ExtractFileExt(SR.Name) + '*') then // Das "*" nehme ich hier oft, weil es in Dateinamen nicht vorkommen kann, // aber da hier auch der "." am Anfang drin ist, geht auch ohne das erste "*" const GRAPHTYPES = '.JPG*.JPEG*.BMP*.DIB*.TIF*.TIFF*.PNG*.GIF*.ICO*.EMF*.HEIF*.HEIC*'; if ContainsText(GRAPHTYPES, ExtractFileExt(SR.Name) + '*') then // oder ... egal wie, du braucht einen DEFINIERTEN Anfang und Ende const GRAPHTYPES = '.JPG.JPEG.BMP.DIB.TIF.TIFF.PNG.GIF.ICO.EMF.HEIF.HEIC.'; if ContainsText(GRAPHTYPES, ExtractFileExt(SR.Name) + '.') then // aber ohne "*" am Anfang und Ende aufpassen, denn was liefert eigentlich ExtractFileExt, wenn die Datei keine Extension hat? if MatchText(ExtractFileExt(SR.Name), ['.JPG', '.JPEG', '.BMP', '.DIB', ...]) then // z.B. eine Array-Kontante oder das Array aus SplitString |
AW: Bilddateien herausfinden
Danke Himitsu für deine Hinweise, ContainsText kannte ich nicht. Jetzt weiß ich, warum mein Programm "einmal im Jahr" bei der Suche nach Bildern crashte.
Himitsu du hattest mich auf die vielen neuen Möglichkeiten von TDrive, TDirectory usw. aufmerksam gemacht. Jetzt will ich sie nutzen. Es gibt TDirectory.GetFiles mit überladenen Methoden. Kann ich hier nicht schon nach Bildern filtern? Ich habe was gefunden:
Delphi-Quellcode:
Es ist ein C#-Beispiel sieht aber der Delphi-Funktion verdammt ähnlich. Da wird nach exe und txt gefiltert. Die Delphi-Doku hat leider kein Beispiel.
IEnumerable<string> FileNames = Directory.GetFiles(@"c:\windows").Where(
CurFile => CurFile.EndsWith(".exe") || CurFile.EndsWith(".txt")); Hier hat jemand die selbe Frage nur in C# : ![]() Willie. |
AW: Bilddateien herausfinden
Schau dir mal die Funktion
![]() Bzw. hier der Direktlink: ![]() Da müsstest du etwas mit dem SearchPattern Parameter bzw. dem TFilterPredicate etwas hinbekommen. |
AW: Bilddateien herausfinden
Mit SearchPattern, SearchOption komme ich klar mit TFilterPredicate nicht. Ist das eine Callback-Funktion? Für SearchOption gibt es ein Beispiel aber nicht für Letzteres. Ich habe auch bei MSDN nach gesehen. Als Hobby-Programmiere fehlen mir die Grundlagen. Mit TFilterPredicate sollen alle Files heraus gefiltert werden, die nicht dem Suchschema entsprechen.
Ich könnte ja ALLE Dateien eines Ordners mit GetFiles einlesen und dann filtern. Aber jetzt habe ich den Ehrgeiz, das heraus zu bekommen. Willie. |
AW: Bilddateien herausfinden
Schau dir mal
![]() |
AW: Bilddateien herausfinden
Danke so geht es.
Ich habe den Nachtrag gelesen. Da ich ohnehin eine StringList mit Objekten benutze, um die Bildernamen und andere Bildinfos zu speichern, stellt sich die Frage, ob ich dann nicht besser bei FindFirst / FindNext bleibe. Erst alle einzeln einlese und sofort die Bilder herausfiltere, als erst ein StringDynArray anzulegen. Willie. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17: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 by Thomas Breitkreuz