Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi In Ordner nach Datei suchen, deren Endung unbekannt ist (https://www.delphipraxis.net/26564-ordner-nach-datei-suchen-deren-endung-unbekannt-ist.html)

dopeline 25. Jul 2004 15:20


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:
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;
Hat jemand einen Vorschlag?


Gruß, dopeline

SirThornberry 25. Jul 2004 15:24

Re: In Ordner nach Datei suchen, deren Endung unbekannt ist
 
die Zeile
Delphi-Quellcode:
if (FindFirst(verz + '*.*',faAnyfile,search) = 0) then
abändern in
Delphi-Quellcode:
if (FindFirst(verz + 'dateinameOhneEndung.*',faAnyfile,search) = 0) then
Dadurch bekommst du nur dateien zurück geliefert welche den richtigen dateinamenanfang haben

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

mischerr 25. Jul 2004 15:35

Re: In Ordner nach Datei suchen, deren Endung unbekannt ist
 
Sieht doch ganz gut aus, falls mask z.B. 'c:\myfile.*' entspricht...

Code:
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;
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!

Grüsse!

dopeline 25. Jul 2004 15:51

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:
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;
Das funktioniert super!
Danke!


Gruß, dopeline

mischerr 25. Jul 2004 16:01

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!

dopeline 25. Jul 2004 17:58

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

mischerr 25. Jul 2004 18:12

Re: In Ordner nach Datei suchen, deren Endung unbekannt ist
 
Ok, aber dann kannste dir auch den repeat / until sparen! Sprich...

Code:
if (FindFirst(verz+mask+'.*', faAnyFile, search) = 0) then
   result:= AnsiLowerCase(ExtractFileExt(verz + search.Name));
Grüsse!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz