![]() |
In Ordner nach Datei suchen, deren Endung unbekannt ist
Hallo!
Ich eine Datei in ein TImage einladen. ich kenne den Dateinamen, allerdings ohne endung. es könnte ein bmp, jpg, gif o.ä. sein. ich muss also diesen ordner nach dieser datei suchen um die endung heraus zu bekommen und die datei dann zu öffnen. Wie stelle ich das an? als ansatz könnte man diese prozedur nutzen. sie durchsucht ein verzeichnis (incl Unterverzeichnisse -> bei mir aber nicht nötig) nach dateien eines bestimmten dateityps und fügt sie in eine ListBox ein. (z.b. alle mp3-dateien aus den eigenen Dateien)
Delphi-Quellcode:
Hat jemand einen Vorschlag?
procedure ScanDirectory(mask : String);
var search : TSearchRec; verz, such: String; begin such := ExtractFileName(mask); verz := ExtractFilePath(mask); if verz[length(verz)] <> '\' then verz := verz + '\'; if (FindFirst(mask, faAnyFile, search) = 0) then repeat Form1.ListBox1.Items.Add(verz + search.Name); until (FindNext(search) <> 0); if (FindFirst(verz + '*.*',faAnyfile,search) = 0) then begin repeat if ((search.Attr and faDirectory) = faDirectory) and (search.Name[1] <> '.') and (search.name <> '..') then ScanDirectory(verz + search.Name + '\' + such); until (FindNext(search) <> 0); FindClose(search); end; end; Gruß, dopeline |
Re: In Ordner nach Datei suchen, deren Endung unbekannt ist
die Zeile
Delphi-Quellcode:
abändern in
if (FindFirst(verz + '*.*',faAnyfile,search) = 0) then
Delphi-Quellcode:
Dadurch bekommst du nur dateien zurück geliefert welche den richtigen dateinamenanfang haben
if (FindFirst(verz + 'dateinameOhneEndung.*',faAnyfile,search) = 0) then
Was soll eigentlich passieren wenn eine ".bmp", ".jpg" und ".gif" existiert. Welche der Dateien willst du dann verwenden? Du müsstest da noch eine hierarchie festlegen |
Re: In Ordner nach Datei suchen, deren Endung unbekannt ist
Sieht doch ganz gut aus, falls mask z.B. 'c:\myfile.*' entspricht...
Code:
Ach ja - in deiner o.g. Funktion sollte das FindClose ein End-Statement weiter hintern sitzen, sodass es auch dann ausgeführt wird, wenn die letzte Bedingung nicht erfüllt ist!
procedure ScanDirectory(mask : String);
var search : TSearchRec; verz, extension: String; begin verz := ExtractFilePath(mask); if verz[length(verz)] <> '\' then verz := verz + '\'; if (FindFirst(mask, faAnyFile, search) = 0) then begin repeat extension:= AnsiLowerCase(ExtractFileExt(verz + search.Name)); if extension='bmp' then... else if extension='gif' then... else if extension='jpg' then... else ... until (FindNext(search) <> 0); end; FindClose(search); end; Grüsse! |
Re: In Ordner nach Datei suchen, deren Endung unbekannt ist
Vielen Dank!
ich habe die Prozedur in eine Funktion geändert. Der Rückgabewert ist die Dateiendung:
Delphi-Quellcode:
Das funktioniert super!
function FindExtension (mask:String):String;
var search : TSearchRec; verz, extension: String; begin verz:=ExtractFilePath(Application.ExeName)+'\Extracted\'; if (FindFirst(verz+mask+'.*', faAnyFile, search) = 0) then begin repeat extension:= AnsiLowerCase(ExtractFileExt(verz + search.Name)); result:=extension; until (FindNext(search) <> 0); end; FindClose(search); end; Danke! Gruß, dopeline |
Re: In Ordner nach Datei suchen, deren Endung unbekannt ist
Ok! Aber so gibts du nur die letzte Extension zurück, wenn mehrere Dateien gefunden werden.
Willst du die Erste - füge ein Break ein - Spart Zeit. Willst du Alle - Übergib als Var eine leere TStingList und lass sie füllen! Grüsse! |
Re: In Ordner nach Datei suchen, deren Endung unbekannt ist
Es kann nur eine datei mit gleichem dateinamen (ohne endung geben) geben. und zwar die dateien von 0001.* bis 9999.*
Es handelt sich bei dem Programm um ein FilmArchiv. Jeder Film hat eine ID (0001-9999) und wenn möglich ein Bild. also wird es niemals ein 0024.jpg und gleichzeitig ein 0024.bmp geben. Gruß, dopeline |
Re: In Ordner nach Datei suchen, deren Endung unbekannt ist
Ok, aber dann kannste dir auch den repeat / until sparen! Sprich...
Code:
Grüsse!
if (FindFirst(verz+mask+'.*', faAnyFile, search) = 0) then
result:= AnsiLowerCase(ExtractFileExt(verz + search.Name)); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 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