Entwickler-Ecke

Dateizugriff - Dateityp herausfinden......


christoph - So 09.02.03 02:47
Titel: Dateityp herausfinden......
Hallo allerseits...

Gibt es die möglichkeit einen Datetyp herauszufinden?? Beispiel: Ich arbeite grade an einem Musikprogramm.....wobei es aber wichtig ist das beim laden (opendialog) herausgefunden wird um welchen Dateityp es sich handelt...
Beispiel:

Quelltext
1:
2:
3:
4:
5:
6:
7:
funktion FileTyp (a:string): Integer
If Filetyp = ogg or wav or mp3 then
Result =1
else
If Filetyp = wma then
Result = 2
end;

wichtig nicht die Endung sondern der Dateityp ist wichtig weil man könnte ja auch ne wma als mp3 umbenennen...

Vielen Dank schon mal im Vorraus

Gruss
Chris

Moderiert von user profile iconTino: Code-Tags hinzugefügt.


Delete - So 09.02.03 04:51

ExtractFileExt.


DaRkFiRe - So 09.02.03 13:19

Nee, Luckie - er hat ja gerade gesagt, dass man die Dateinamen der WMAs in MP3-Endungen umbenennen kann.

In diesem Fall rate ich, die ersten 100 Bytes der Datei auszulesen und vom Muster (Header!?) auf das Datei-Format zu schließen.


christoph - So 09.02.03 19:24

@ DaRkFiRe
Genaus das meinte ich......
Ich möchte im Prinzip den Header auslesen nur wie....???
Ich vermute mal über einen Filestream oder ...(hab mit Filestream leider noch nicht gearbeitet.............
Vielleicht hast ja ein kleines Beispiel....
Vielen Dank im Vorraus
Gruss
Chris


Delete - So 09.02.03 19:58

Mist ich hatte den Satz unter dem Code nicht mehr gelesen. Ja, da muß man wohl den Header auslesen. Informationen zu den Dateiformaten gibt es hier: http://www.wotsit.org


DaRkFiRe - So 09.02.03 20:15

Ähm - ich hab jetzt keinen Schimmer, wie's bei MP3 aussieht und eine WMA hab ich zum Testen auch nich auf meiner Festplatte. Und mit dem Dateiformat möchte ich mich jetzt auch ungern befassen.

Du musst einen Puffer einlesen (100 Bytes z.B.) und diesen später dann in einen Record quetschen. Sicher wird WMA eine Signatur haben - also quasi eine Zeichenfolge am Anfang der Datei, die die Datei als WMA-Datei identifiziert (hier alles Vermutung - ICH WEIß NICHT, OB ES SO IST!!!)


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
type
  TWMAHeader = record
     ...
end;

function isWMA(sFileName:STRING):BOOLEAN;
var RFS:TFileStream;
var hdWMA:TWMAHeader;
begin
  Result:=False;
  RFS:=TFileStream.Create(sFileName,fmOpenRead OR fmShareDenyWrite);
  RFS.Read(hdWMA,sizeof(hdWMA));
  IF hdWMA.<...> = <...> THEN
    Result:=True;
  RFS.Free();
end.


Wie gesagt - so würde ich's machen...