Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Pos & Copy liefert bei zu langen Strings falsches Ergebnis (https://www.delphipraxis.net/75309-pos-copy-liefert-bei-zu-langen-strings-falsches-ergebnis.html)

Nils_13 17. Aug 2006 14:06


Pos & Copy liefert bei zu langen Strings falsches Ergebn
 
Hi,

ich möchte von einer Datei, egal wie lang der Name ist, die Endung herausfinden. Dazu benutze ich Pos und Copy. Bei zu langen Dateinamen liefert Copy allerdings ein falsches Ergebniss zurück. Die betroffenen Zeilen sind mit Pfeilen markiert.
Delphi-Quellcode:
TID3Tag = record                      
  ID: Array[0..3] of Char;
   Titel: Array[0..30] of Char;
   Artist: Array[0..30] of Char;
   Album: Array[0..30] of Char;
   Year: Array[0..4] of Char;
   Comment: Array[0..30] of Char;
   Genre: Byte;
   Filename: String;
   Endung: String;  <--
end;

function TfrmMain.ReadID3Tag(const FileName: String): TID3Tag;
var i : Integer;
begin
  FillChar(Result, SizeOf(Result), 0);
  with TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone) do
  try
    Position := Size - 128;
    Read(Result.ID, 3);
    Read(Result.Titel, 30);
    Read(Result.Artist, 30);
    Read(Result.Album, 30);
    Read(Result.Year, 4);
    Read(Result.Comment, 30);
    Read(Result.Genre, 1);
    Result.Filename := Filename;
    i := Pos('.' , Filename);        <--
    Result.Endung := UpperCase(Copy(Filename, i + 1, Length(Filename))); <--
    ShowMessage(Result.Endung); <-- bei zu langen Dateinamen kommt z.B. safhdfagshfghds.mp3 als          Rückgabewert an, bei kurzen Dateinamen läuft alles
  finally
    Free;
  end;
end;
Ich weiß nicht, ob die Methode gut ist, denn es gibt schließlich doch Leute, die . in einen Dateinamen reinschreiben, dann bricht natürlich bei dem Programm alles zusammen, aber da sind es nicht immer 3 Zeichen lange Endungen sondern auch teilweise 4, wie z.B. MPEG oder AIFF.

Meflin 17. Aug 2006 14:07

Re: Pos & Copy liefert bei zu langen Strings falsches Er
 
Na dann weise ich dich mal dezent auf Delphi-Referenz durchsuchenExtractFileExt hin ;)


Klaus01 17. Aug 2006 14:08

Re: Pos & Copy liefert bei zu langen Strings falsches Er
 
Warum nutzt Du denn nicht ExtractfileExt?

Grüße
Klaus

Nils_13 17. Aug 2006 14:15

Re: Pos & Copy liefert bei zu langen Strings falsches Er
 
:twisted: schon wieder diesen Befehl vergessen. :twisted: Danke!

Khabarakh 17. Aug 2006 14:31

Re: Pos & Copy liefert bei zu langen Strings falsches Er
 
Auch wenn es ExtractFileExt gibt, wäre es klüger, nach dem letzten und nicht nach dem ersten Punkt zu suchen ;) .


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 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