Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem wegen/mit ID3Tags (https://www.delphipraxis.net/48456-problem-wegen-mit-id3tags.html)

Nils_13 25. Jun 2005 16:50


Problem wegen/mit ID3Tags
 
Hi,

ich arbeite an meiner Playlist von dAmp. Ich habe jetzt ID3 Tags noch eingebaut. Wenn ich normal auf hinzufügen klicke und daraufhin auf die Playlist klicke, kommt der Fehler
'Mp3File
...
does not exist!'. Warum ? Ich habe diese Meldung eingebaut falls es Fehler gibt. Hier der Code.(wenn ich alle MP3 Dateien eines Ordners einfüge und auf eine Datei drauf klicke, kommt kein Fehler)
Delphi-Quellcode:
procedure FillID3TagInformation(mp3File:string; Title,Artist,Album,Year,Genre,Comment:TEdit);
var //fMP3: file of Byte;
    ID3 : TID3Rec;
    fmp3: TFileStream;
begin
  fmp3:=TFileStream.Create(mp3File, fmOpenRead);
  try
    fmp3.position:=fmp3.size-128;
    fmp3.Read(ID3,SizeOf(ID3));
  finally
    fmp3.free;
  end;

 { or the non Stream approach - as in ChangeID3Tag procedure
 try
   AssignFile(fMP3, mp3File);
   Reset(fMP3);
   try
     Seek(fMP3, FileSize(fMP3) - 128);
     BlockRead(fMP3, ID3, SizeOf(ID3));
   finally
   end;
 finally
   CloseFile(fMP3);
 end;
 }
 if ID3.Tag <> 'TAG' then begin
   Title.Text:='Wrong or no ID3 tag information';
   Artist.Text:='Wrong or no ID3 tag information';
   Album.Text:='Wrong or no ID3 tag information';
   Year.Text:='Wrong or no ID3 tag information';
   Genre.Text:='Wrong or no ID3 tag information';
   Comment.Text:='Wrong or no ID3 tag information';
 end else begin
   Title.Text:=ID3.Title;
   Artist.Text:=ID3.Artist;
   Album.Text:=ID3.Album;
   Year.Text:=ID3.Year;
   if ID3.Genre in [0..MaxID3Genre] then
     Genre.Text:=ID3Genre[ID3.Genre]
   else
     Genre.Text:=IntToStr(ID3.Genre);
   Comment.Text:=ID3.Comment
 end;
end;

procedure ChangeID3Tag(NewID3: TID3Rec; mp3FileName: string);
var
  fMP3: file of Byte;
  OldID3 : TID3Rec;
begin
  try
    AssignFile(fMP3, mp3FileName);
    Reset(fMP3);
    try
      Seek(fMP3, FileSize(fMP3) - 128);
      BlockRead(fMP3, OldID3, SizeOf(OldID3));
      if OldID3.Tag = 'TAG' then
        { Replace old tag }
        Seek(fMP3, FileSize(fMP3) - 128)
      else
        { Append tag to file because it doesn't exist }
        Seek(fMP3, FileSize(fMP3));
      BlockWrite(fMP3, NewID3, SizeOf(NewID3));
    finally
    end;
  finally
    CloseFile(fMP3);
  end;
end;

procedure FillMP3FileList(Folder: string; sl: TStrings);
var Rec : TSearchRec;
begin
 sl.Clear;
 if SysUtils.FindFirst(Folder + '*.mp3', faAnyFile, Rec) = 0 then
  try
    repeat
      sl.Add(Rec.Name);
    until SysUtils.FindNext(Rec) <> 0;
  finally
    SysUtils.FindClose(Rec);
  end;
end;

procedure TForm1.Label13Click(Sender: TObject); //importieren der Dateien aus einem Ordner
var mp3Folder : string;
begin

 mp3Folder := BrowseDialog('Choose a folder with mp3 files', BIF_RETURNONLYFSDIRS);
 if mp3Folder = '' then Exit;

 txtFolder.Caption := mp3Folder;

 //fill the list box with mp3 files
 FillMP3FileList(mp3Folder, playlist.Items);
end;

function TForm1.BrowseDialog(const Title: string; const Flag: integer): string;
var
  lpItemID : PItemIDList;
  BrowseInfo : TBrowseInfo;
  DisplayName : array[0..MAX_PATH] of char;
  TempPath : array[0..MAX_PATH] of char;
begin
  Result:='';
  FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
  with BrowseInfo do begin
    hwndOwner := Application.Handle;
    pszDisplayName := @DisplayName;
    lpszTitle := PChar(Title);
    ulFlags := Flag;
  end;
  lpItemID := SHBrowseForFolder(BrowseInfo);
  if lpItemId <> nil then begin
    SHGetPathFromIDList(lpItemID, TempPath);
    Result := IncludeTrailingBackslash(TempPath);
    GlobalFreePtr(lpItemID);

end;

end;

procedure TForm1.playlistClick(Sender: TObject);
 var mp3File:string;
begin
if playlist.Items.Count=0 then exit;
  mp3File := Concat(txtFolder.Caption, playlist.Items.Strings[playlist.ItemIndex]);
  if not FileExists(mp3File) then begin
   ShowMessage('MP3 file '+#13#10+ mp3File +#13#10+'does not exist!');
   exit;
  end;
 FillID3TagInformation(mp3File, form2.edTitle, form2.edArtist, form2.edAlbum, form2.edYear, form2.edGenre, form2.edComment);
end;

Luckie 25. Jun 2005 17:01

Re: Problem wegen/mit ID3Tags
 
Könntest du bitte den Quelltext auf die relevante Stelle kürzen oder zu mindest die Zeile angeben, wo der Fehler kommt?

Nils_13 25. Jun 2005 17:03

Re: Problem wegen/mit ID3Tags
 
Es ist kein Fehler beim Complieren, es wird die Meldung 'Mp3File...does not exist!'. Die Anwendung wird also weiterhin ausgeführt, allerdings kann ich das ausgewählte Lied nicht abspielen. Warum der Fehler auftritt weiß ich nich, deshalb frag ich ja.

JasonDX 25. Jun 2005 17:06

Re: Problem wegen/mit ID3Tags
 
Zitat:

Zitat von Nils_13
Delphi-Quellcode:
  if not FileExists(mp3File) then begin
  ShowMessage('MP3 file '+#13#10+ mp3File +#13#10+'does not exist!');
  exit;
end;

Hi Nils
versuch mal das rausgepikte Codestück zu analysieren:
Die Fehlermeldung kommt nur, wenn FileExists(mp3File) false zurückgibt.
Wenn du in der OH nach Delphi-Referenz durchsuchenFileExists suchst, siehst du, dass diese nur false zurückgibt, wenn die Datei nicht existiert.
Somit liegt da kein Fehler im Code, sondern es handelt sich einfach nur um eine Datei, die nicht existiert :roll:
Schau mal, was genau ausgegeben wird. Es kommt was in die Richtung raus:
ShowMessage bringt:

MP3 file
C:\DerFalschePfad\EinerNichtExistierenden\Mp3-Datei.mp3
does not exist!

dann schaust du, ob es wirklich die Datei gibt, die da angegeben wird.
(Wenn es sich um einen Relativen Pfad handelt, musst du vom Verzeichnis deiner Echse ausgehn)

Luckie 25. Jun 2005 17:07

Re: Problem wegen/mit ID3Tags
 
Das ist mir schon klar. fehler muss jan icht immer heißen, dass Delphi den Quellcode nicht kompiliert. Aber wenn dir der Begriff Fehler nicht zu sagt, denn sag du mir, wie du es nennst.

Aber eigentlcih sagt die Fehlermeldung doch wohl schon alles: Entweder ist der Pfad nicht korrekt oder der Dateiname. Jetzt ist es an dir, die Stelle zu finden, wo das passiert.

Nils_13 25. Jun 2005 17:16

Re: Problem wegen/mit ID3Tags
 
Schön, wieso läuft es dann hier ?
Delphi-Quellcode:
procedure TForm1.Label13Click(Sender: TObject);
var mp3Folder : string;
begin

 mp3Folder := BrowseDialog('Choose a folder with mp3 files', BIF_RETURNONLYFSDIRS);
 if mp3Folder = '' then Exit;

 txtFolder.Caption := mp3Folder;

 //fill the list box with mp3 files
 FillMP3FileList(mp3Folder, playlist.Items);
end;

malo 25. Jun 2005 17:25

Re: Problem wegen/mit ID3Tags
 
Zitat:

Zitat von Nils_13
Schön, wieso läuft es dann hier ?

Das weiß ich nicht. Solange du nicht aufhörst in rätseln zu reden und uns nicht genau erklärst, was du uns sagen willst, kann dir niemand helfen. Bitte erkläre doch genau dein Problem und deine Frage. Das kann doch nicht so schwer sein, oder? :roll:

Sorry, wenn ich das jetzt so grob sagen muss, aber irgendwo wird es einfach zu viel.

JasonDX 25. Jun 2005 17:26

Re: Problem wegen/mit ID3Tags
 
Zitat:

Zitat von Nils_13
Schön, wieso läuft es dann hier ?

Weil du da den Ordner mitgibst :roll:
schau mal genau auf die Meldung, die dir im Ursprungsproblem kommt:
da steht ws nur
[equote="'Deine' Meldung"]mp3 file
datei.mp3
does not exist!
[/equote]
d.h. er findet die Datei nicht.
Klar, schließlich fehlt auch der Dateipfad :roll:
Das 2. Stück code klappt, weil da ne Variable dabei is, die den Dateipfad enthält (mp3Folder)

Etwas Eigenintelligenz wäre beim Programmieren schon von Vorteil....

Flocke 26. Jun 2005 00:16

Re: Problem wegen/mit ID3Tags
 
Was genau macht die Funktion "Concat" in:
Delphi-Quellcode:
mp3File := Concat(txtFolder.Caption, playlist.Items.Strings[playlist.ItemIndex]);
Wenn die kein "IncludeTrailingPathDelimiter" drin hat, dann fehlt dir wohl ein Backslash.


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