AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Bilddateien herausfinden

Ein Thema von Willie1 · begonnen am 5. Dez 2020 · letzter Beitrag vom 7. Dez 2020
Antwort Antwort
Willie1

Registriert seit: 28. Mai 2008
555 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

Bilddateien herausfinden

  Alt 5. Dez 2020, 11:19
Hallo,
Delphi-Quellcode:
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;
Ist das so richtig, um Bildformate aus einem Ordner heraus zu filtern?

Ich sehe schon, mit TDirectory.GetFiles lässt sich das vereinfachen!!!
Gruß Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.

Geändert von Willie1 ( 5. Dez 2020 um 12:17 Uhr) Grund: Nachtrag
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.731 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Bilddateien herausfinden

  Alt 5. Dez 2020, 12:46
Erstmal was Grundsärtliches:
Delphi-Quellcode:
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
Und nein, es sei denn du willst auch z.B. das ".H" im ".HEI" finden.
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 5. Dez 2020 um 12:58 Uhr)
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
555 Beiträge
 
Delphi 10.1 Berlin Starter
 
#3

AW: Bilddateien herausfinden

  Alt 5. Dez 2020, 18:03
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:
IEnumerable<string> FileNames = Directory.GetFiles(@"c:\windows").Where(
                CurFile => CurFile.EndsWith(".exe") || CurFile.EndsWith(".txt"));
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.
Hier hat jemand die selbe Frage nur in C# :https://entwickler-ecke.de/topic_Dir...n_93844,0.html

Willie.

Geändert von Willie1 ( 5. Dez 2020 um 19:43 Uhr)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.588 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Bilddateien herausfinden

  Alt 5. Dez 2020, 21:52
Schau dir mal die Funktion Delphi-Referenz durchsuchenSystem.IOUtils.TDirectory.GetFiles an.

Bzw. hier der Direktlink: http://docwiki.embarcadero.com/Libra...ctory.GetFiles

Da müsstest du etwas mit dem SearchPattern Parameter bzw. dem TFilterPredicate etwas hinbekommen.
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
555 Beiträge
 
Delphi 10.1 Berlin Starter
 
#5

AW: Bilddateien herausfinden

  Alt 6. Dez 2020, 18:28
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.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.588 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Bilddateien herausfinden

  Alt 6. Dez 2020, 19:21
Schau dir mal diese Funktion von David Heffernan bei SO an. Die sollte dir weiterhelfen. Beachte auch seinen dazugehörigen Hinweis. Der wird vmtl. wichtig, wenn du sehr viele Dateien suchst.
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
555 Beiträge
 
Delphi 10.1 Berlin Starter
 
#7

AW: Bilddateien herausfinden

  Alt 7. Dez 2020, 11:36
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.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.

Geändert von Willie1 ( 7. Dez 2020 um 11:58 Uhr)
  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:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf