![]() |
Problem wegen/mit ID3Tags
Hi,
ich arbeite an meiner Playlist von ![]() '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; |
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?
|
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.
|
Re: Problem wegen/mit ID3Tags
Zitat:
versuch mal das rausgepikte Codestück zu analysieren: Die Fehlermeldung kommt nur, wenn FileExists(mp3File) false zurückgibt. Wenn du in der OH nach ![]() 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) |
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. |
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; |
Re: Problem wegen/mit ID3Tags
Zitat:
Sorry, wenn ich das jetzt so grob sagen muss, aber irgendwo wird es einfach zu viel. |
Re: Problem wegen/mit ID3Tags
Zitat:
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.... |
Re: Problem wegen/mit ID3Tags
Was genau macht die Funktion "Concat" in:
Delphi-Quellcode:
Wenn die kein "IncludeTrailingPathDelimiter" drin hat, dann fehlt dir wohl ein Backslash.
mp3File := Concat(txtFolder.Caption, playlist.Items.Strings[playlist.ItemIndex]);
|
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