AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Funktion für Entschlüsselung von Dateierweiterung
Thema durchsuchen
Ansicht
Themen-Optionen

Funktion für Entschlüsselung von Dateierweiterung

Ein Thema von robinWie · begonnen am 11. Dez 2005 · letzter Beitrag vom 11. Dez 2005
Antwort Antwort
Benutzerbild von robinWie
robinWie
Registriert seit: 26. Okt 2005
Hallo,

ich habe heute mal 'ne Function geschrieben die nicht die einfach Dateierweiterung ausgibt sonder wie diese heisst.

Release: 11.12.05
Geschrieben für: Win32 | VCL
Unterstützt 27 Dateitypen
Verwendung: einfach die Function in den Code kopieren und bei z.B. Button1Click eingeben:
 Label1.Caption:=GetFullExt(<Vollständiger Datiname>); Wenn Ihr wollt könnt ihr noch Dateien Hinzufügen, aber nicht vergessen auc ganz unteneintragen damit die datei nicht doch als "Unbekannt" abgestempelt wird.

Hier die Function
Delphi-Quellcode:
function GetFullExt(const FileName: string): string;
var
  Ext: string;
begin
  Ext:=ExtractFileExt(FileName);
  //Pictures
  if Ext='.jpgthen
    Result:='JPG / JPEG Bild';
  if Ext='.jpegthen
    Result:='JPG / JPEG Bild';
  if Ext='.JPGthen
    Result:='JPG / JPEG Bild';
  if Ext='.JPEGthen
    Result:='JPG / JPEG Bild';
  if Ext='.icothen
    Result:='Windows Symbol';
  if Ext='.bmpthen
    Result:='Windows Bitmap';
  if Ext='.gifthen
    Result:='GIF Bild';
  if Ext='.tifthen
    Result:='Windows Foto Format';
  if Ext='.xcfthen
    Result:='GIMP Bild';
  //Texte
  if Ext='.docthen
    Result:='Microsoft Word Dokument';
  if Ext='.xlsthen
    Result:='Microsoft Exel Tabelle';
  if Ext='.txtthen
    Result:='Textdokument';
  if Ext='.rtfthen
    Result:='Rich Text Format';
  //Source
  if Ext='.pasthen
    Result:='Delphi Quellcode';
  if Ext='.dfmthen
    Result:='Delphi Formular Datei';
  if Ext='.dprthen
    Result:='Delphi Projekt'
  if Ext='.bdsprojthen
    Result:='Borland Developer Studio Project File';
  if Ext='.dcuthen
    Result:='Delphi Compilierte Unit';
  if Ext='.resthen
    Result:='Ressource Datei';
  if Ext='.csthen
    Result:='C# Source File';
  if Ext='.batthen
    Result:='Stapelverarbeitungsdatei für MS-DOS';
  //Other Files
  if Ext='.exethen
    Result:='Ausführbare Datei';
  if Ext='.dllthen
    Result:='Dynamic Link Library / Programmbibliotek';
  if Ext='.emlthen
    Result:='Internet E-Mail Nachricht';
  if Ext='.hlpthen
    Result:='Hilfedatei'
  if Ext='.inithen
    Result:='Konfigurations einstellung';
  if Ext='.logthen
    Result:='"Logbuch"-Datei';
  if Ext<>'.jpgthen if Ext<>'.jpegthen if Ext<>'.icothen
  if Ext<>'.bmpthen if Ext<>'.gifthen if Ext<>'tifthen
  if Ext<>'.JPGthen if Ext<>'.JPEGthen if Ext<>'.docthen
  if Ext<>'.xlsthen if Ext<>'.txtthen if Ext<>'rtfthen
  if Ext<>'.exethen if Ext<>'.dllthen if Ext<>'.pasthen
  if Ext<>'.dfmthen if Ext<>'.dprthen if Ext<>'.bdsprojthen
  if Ext<>'.dcuthen if Ext<>'.resthen if Ext<>'.cdthen
  if Ext<>'.batthen if Ext<>'.xcfthen if Ext<>'.emlthen
  if Ext<>'.hlpthen if Ext<>'.ini' the nif Ext<>'.logthen
    Result:='unbekannte Dateierweiterung';
end;
Ein Computer kann (fast) alles.... Man muss es ihm nur beibringen
 
marabu
 
#2
  Alt 11. Dez 2005, 18:05
Hallo Robin,

Microsoft gibt zu Windows ab und an einen Style Guide als Buch heraus. Für das Einbinden von Dateien in Windows ist der 95-er Style Guide maßgebend. Das Buch heißt "Die Windows-Oberfläche - Leitfaden zur Softwaregestaltung" ISBN 3-86063-226-4. Darin ist dann beschrieben, wie man so etwas macht:

Delphi-Quellcode:
uses
  Registry;

function ExtToTypeName(ref: string): string;
var
  reg: TRegistry;
begin
  reg := TRegistry.Create();
  Result := '';
  reg.RootKey := HKEY_CLASSES_ROOT;
  if reg.OpenKeyReadOnly(ref) then
  begin
    Result := reg.ReadString('');
    reg.CloseKey;
    if Pos('.', ref) = 1 then
      Result := ExtToTypeName(Result);
  end;
  reg.Free;
end;
Wenn du diese Routine aufrufst, dann erhältst du für jede registrierte Erweiterung den hinterlegten TypeName.

ShowMessage(ExtToTypeName('.txt')); Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von robinWie
robinWie

 
Delphi 2005 Personal
 
#3
  Alt 11. Dez 2005, 18:15
Hab mir schon gedacht das es eine einfachere Variante gibt, danke für den Hinweis. Aber wenn man Dateien bei seiner Anwendung eine eigene bezeichnung geben will kann man meine Function benutzen.
Robin W.
  Mit Zitat antworten Zitat
omata

 
Delphi 7 Enterprise
 
#4
  Alt 11. Dez 2005, 18:17
Hallo Robin,

Solch eine IF-Verschachtelung ist nicht wirklich sinnvoll und übersichtlich.

Wenn es wirklich mal nicht anders geht, dann mach doch zum Beispiel folgendes...

Delphi-Quellcode:
if A = B then
  Result:=''
else if A = C then
  Result:=''
else if A = D then
  Result:=''
:
:
hier wird nur solange noch weiter verglichen, bis ein Treffer gefunden wurde.

Danke marabu für den Registry-Hinweis, so ist es natürlich am sinnvollsten.

Wenn man aber mal solch eine Struktur wie sie Robin vorgeschlagen hat braucht, dann kann man das etwas eleganter über ein konstantest Array lösen.

Delphi-Quellcode:
type
  TTyp = (tNone, tPictures, tTexte, tSource, tOtherFiles);
  TMyResult = record
                Endung:string;
                Beschreibung:string;
                Typ:TTyp;
              end;


:
:

function GetFullExt(const FileName: string): TMyResult;
type
  TBeschreibung = record
                       A:string[7];
                       B:TTyp;
                       C:string;
                     end;
const
  INFOS:array[1..25] of TBeschreibung = (
    (A: 'jpg'; B:tPictures; C:'JPG / JPEG Bild'),
    (A: 'jpeg'; B:tPictures; C:'JPG / JPEG Bild'),
    (A: 'ico'; B:tPictures; C:'Windows Symbol'),
    (A: 'bmp'; B:tPictures; C:'Windows Bitmap'),
    (A: 'gif'; B:tPictures; C:'GIF Bild'),
    (A: 'tif'; B:tPictures; C:'Windows Foto Format'),
    (A: 'xcf'; B:tPictures; C:'GIMP Bild'),

    (A: 'doc'; B:tTexte; C:'Microsoft Word Dokument'),
    (A: 'xls'; B:tTexte; C:'Microsoft Exel Tabelle'),
    (A: 'txt'; B:tTexte; C:'Textdokument'),
    (A: 'rtf'; B:tTexte; C:'Rich Text Format'),

    (A: 'pas'; B:tSource; C:'Delphi Quellcode'),
    (A: 'dfm'; B:tSource; C:'Delphi Formular Datei'),
    (A: 'dpr'; B:tSource; C:'Delphi Projekt'),
    (A: 'bdsproj'; B:tSource; C:'Borland Developer Studio Project File'),
    (A: 'dcu'; B:tSource; C:'Delphi Compilierte Unit'),
    (A: 'res'; B:tSource; C:'Ressource Datei'),
    (A: 'cs'; B:tSource; C:'C# Source File'),
    (A: 'bat'; B:tSource; C:'Stapelverarbeitungsdatei für MS-DOS'),

    (A: 'exe'; B:tOtherFiles; C:'Ausführbare Datei'),
    (A: 'dll'; B:tOtherFiles; C:'Dynamic Link Library / Programmbibliotek'),
    (A: 'eml'; B:tOtherFiles; C:'Internet E-Mail Nachricht'),
    (A: 'hlp'; B:tOtherFiles; C:'Hilfedatei'),
    (A: 'ini'; B:tOtherFiles; C:'Konfigurations einstellung'),
    (A: 'log'; B:tOtherFiles; C:'"Logbuch"-Datei')
  );
var
  Ext: string;
  i:integer;
  abbruch:boolean;
begin
  Ext:=lowercase(ExtractFileExt(FileName));
  i:=low(INFOS);
  abbruch:=false;
  while (i <= high(INFOS)) and not abbruch do begin
    abbruch:=(Ext = INFOS[i].A);
    if not abbruch then
      inc(i);
  end;
  if abbruch then begin
    Result.Endung:=INFOS[i].A;
    Result.Typ:=INFOS[i].B;
    Result.Beschreibung:=INFOS[i].C;
  end
  else begin
    Result.Endung:='';
    Result.Typ:=tNone;
    Result.Beschreibung:='unbekannte Dateierweiterung';
  end;
end;
So ist eine Erweiterung noch sehr einfach möglich. Robin bei deinem Beispiel hast du gleich nach dem ersten Typ aufgegeben auch noch gross/klein zu unterscheiden. Bei meinem Vorschlag braucht man nur noch an einer Stelle einmal etwas definieren, dass dann für alle Inhalte im Array gilt.

Naja, ist nur ein Vorschlag.

MfG
Thorsten
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:46 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