Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.031 Beiträge
 
Delphi 12 Athens
 
#29

AW: ID3v1-Tag, ID3v2-Tag und MPEG-Header einer MP3 auslesen

  Alt 20. Nov 2010, 21:39
Bedenke bitte, daß dein D3 nicht grade das Jüngste ist und es demnach mit vielen "neueren" Compilerfeatures nicht zurecht kommt.

So, aber da ich (und auch viele Andere) selber kein D3 installiert hab, kann ich ohne detailiertere Fehlermeldung nichts ausrichten.

Also Fehlermeldungen und die zugehörigen Fehlerzeilen/-stellen.


Aber wenn ich dann sowas wie das seh (aus Post #1)
Delphi-Quellcode:
function ReadTag(const FileName: string; var TagData: TagRecord): Boolean;
var
  SourceFile : File;
begin
  try
    Result := true;
    AssignFile(SourceFile, FileName);
    FileMode := 0;
    Reset(SourceFile, 1);
    Seek(SourceFile, FileSize(SourceFile) - 128);
    BlockRead(SourceFile, TagData, 128);
    CloseFile(SourceFile);
  except
    Result := false;
  end;
end;
Dann rate ich von einer Verwendung dieses Codes eher ab.

Wenn, dann eigentlich so
Delphi-Quellcode:
function ReadTag(const FileName: string; var TagData: TagRecord): Boolean;
var
  SourceFile : File;
begin
  AssignFile(SourceFile, FileName);
  FileMode := 0;
  Reset(SourceFile, 1);
  try
    try
      Seek(SourceFile, FileSize(SourceFile) - 128);
      BlockRead(SourceFile, TagData, 128);
      Result := true;
    except
      Result := false;
    end;
  finally
    CloseFile(SourceFile);
  end;
end;
eventuell auch so
Delphi-Quellcode:
function ReadTag(const FileName: string; var TagData: TagRecord): Boolean;
var
  SourceFile : File;
begin
  AssignFile(SourceFile, FileName);
  FileMode := 0;
  Reset(SourceFile, 1);
  try
    Seek(SourceFile, FileSize(SourceFile) - 128);
    BlockRead(SourceFile, TagData, 128);
    Result := true;
  except
    Result := false;
  end;
  CloseFile(SourceFile);
end;
oder ganz ohne Exceptions:
Delphi-Quellcode:
function ReadTag(const FileName: string; var TagData: TagRecord): Boolean;
var
  SourceFile : File;
begin
  AssignFile(SourceFile, FileName);
  FileMode := 0;
  {$I-}
  Reset(SourceFile, 1);
  Seek(SourceFile, FileSize(SourceFile) - 128);
  BlockRead(SourceFile, TagData, 128);
  CloseFile(SourceFile);
  Result := IOResult = 0;
  {$I+}
end;


Vom Codeaufbau her würde ich eher die in Beitrag #6 und #27 verlinkten Codes empfehlen, aber diese laufen teilweise nichtmal in D7/D2006 und demnach erst Recht nicht in einem D3.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (20. Nov 2010 um 21:45 Uhr)
  Mit Zitat antworten Zitat