![]() |
ID3v2 wird nicht Ausgeführt - warum?
Hallöle,
Ich habe ein Problem (mal wieder - selbes Programm - soll MP3 Dateien finden und Auflisten) Jedoch funktioniert das Liste nicht mit gausi seiner ID3v1 - ID3v2 Codes irgendwie nicht. Ich habe Folgenden Code: in der uses ist Deklariert: Mp3FileUtils_WE var Form1: TForm1; quelle:string; Id3v1Tag:TId3v1Tag; Id3v2Tag:TId3v2Tag; der code soll MP3 Dateien finden und in das ListView Eintragen:
Delphi-Quellcode:
Start des Programmes
procedure TForm1.CreateFileList(Dir, Ext: String; UseSubDirs: Boolean);
var SR: TSearchRec; stream: TFilestream; Item: TListItem; begin If FindFirst(Dir + '*.*', faAnyFile, SR) = 0 then Repeat If (SR.Attr and faDirectory = faDirectory) and (SR.Name <> '.') and (SR.Name <> '..') and (UseSubDirs) then CreateFileList(IncludeTrailingPathDelimiter(Dir + SR.Name), Ext, UseSubDirs) Else If LowerCase(ExtractFileExt(SR.Name)) = LowerCase(Ext) then begin Application.ProcessMessages; //////////////////////////////////////////////////////////////////////////// stream := TFileStream.Create(dir + sr.name, fmOpenRead or fmShareDenyWrite); // ID3v2-Tag auslesen Id3v2Tag.ReadFromStream(stream); // Position neu setzen if Not Id3v2Tag.exists then stream.Seek(0, sobeginning) else stream.Seek(Id3v2Tag.size, soFromBeginning); // ID3v1-Tag auslesen Id3v1Tag.ReadFromStream(stream); stream.free; // ListView1.Items.Add(Dir + SR.Name); //////////////////////////////////////////////////////////////////////////// Item.Caption:=Id3v2Tag.Artist; Item.SubItems.Add(Id3v2Tag.Title); Item.SubItems.Add(Id3v2Tag.Album); Item.SubItems.Add(SR.Name); Label1.Caption:='Bin da!'; end; Until FindNext(SR) <> 0; FindClose(SR); end;
Delphi-Quellcode:
bei FormDestroy wirds wieder frei gegeben
procedure TForm1.FormCreate(Sender: TObject);
begin Id3v1Tag:=TId3v1Tag.Create; Id3v2Tag:=TId3v2Tag.Create; end; und zu guter letzt die Suche selbst
Delphi-Quellcode:
Habe diesmal auf eine Sortierung bisher verzichtet! (Programm ist neu Entwickelt :dp:
procedure TForm1.BtnSucheClick(Sender: TObject);
begin ListView1.Clear; CreateFileList(quelle + '\','mp3', CheckBox1.Checked); end; Grüße! |
Re: ID3v2 wird nicht Ausgeführt - warum?
Mach mal vor mp3 einen Punkt also .mp3
Delphi-Quellcode:
CreateFileList(quelle + '\','.mp3', CheckBox1.Checked);
|
Re: ID3v2 wird nicht Ausgeführt - warum?
Zugriffsverletzung bei
Delphi-Quellcode:
===========
If (SR.Attr and faDirectory = faDirectory) and (SR.Name <> '.') and (SR.Name <> '..') and (UseSubDirs) then CreateFileList(IncludeTrailingPathDelimiter(Dir + SR.Name), Ext, UseSubDirs);
Meldungen: =========== Erste Gelegenheit für Exception bei $7C81EB33. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 00468208 in Modul 'MP3_Lister_neu.exe'. Lesen von Adresse 00000024'. Prozess MP3_Lister_neu.exe (4092) Erste Gelegenheit für Exception bei $7C81EB33. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 00468208 in Modul 'MP3_Lister_neu.exe'. Lesen von Adresse 00000024'. Prozess MP3_Lister_neu.exe (4092) Erste Gelegenheit für Exception bei $7C81EB33. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 00468208 in Modul 'MP3_Lister_neu.exe'. Lesen von Adresse 00000024'. Prozess MP3_Lister_neu.exe (4092) ^^ wenn ihr damit was anfangen könnt xD |
Re: ID3v2 wird nicht Ausgeführt - warum?
Ich bin mir nicht ganz sicher, was die Bedienung von TListview angeht, aber wenn man da Items einfügt, müssen die dann nicht erst erzeugt werden mit
Delphi-Quellcode:
, bevor man die Eigenschaften setzt?
Item := TListItem.Create;
|
Re: ID3v2 wird nicht Ausgeführt - warum?
Delphi-Quellcode:
sr.name würde vollkommen reichen weil es schon den kompletten Pfad zurückgibt
stream := TFileStream.Create(dir + sr.name, fmOpenRead or fmShareDenyWrite);
Mit freundlichen Grüßen |
Re: ID3v2 wird nicht Ausgeführt - warum?
Hallo,
Zitat:
Gruß Hawkeye |
Re: ID3v2 wird nicht Ausgeführt - warum?
in meinem Programm klappt es aber wunderbar...
Delphi-Quellcode:
Ich nutze übrigens die Komponente von
...
if FindFirst(dir+'\*.mp3', faAnyFile, sr) = 0 then begin repeat if ReadID3v2Tag(sr.Name, lTitle, lArtist, lAlbum, lYear, lComment, lTrackNo) then begin ... ![]() |
Re: ID3v2 wird nicht Ausgeführt - warum?
Natürlich funktioniert es - wenn die Dateien im aktuellen Verzeichnis liegen. TSearchRec enthält in der Eigenschaft .Name den Dateinamen inklusive Extension, nicht aber einen Verzeichnisanteil.
Ändere den Quelltext mal wie folgt ab:
Delphi-Quellcode:
Die .mp3-Dateien sollten weiterhin gefunden werden, da FindFirst() eine Verzeichnisangabe erhält. Das Auslesen der ID3-Tags sollte aber nicht mehr funktionieren, weil alle Dateien im aktuellen Verzeichnis (hier C:\) gesucht werden.
...
SetCurrentDir ('C:\'); // neu if FindFirst(dir+'\*.mp3', faAnyFile, sr) = 0 then begin repeat if ReadID3v2Tag(sr.Name, lTitle, lArtist, lAlbum, lYear, lComment, lTrackNo) then begin ... Gruß Hawkeye |
Re: ID3v2 wird nicht Ausgeführt - warum?
Zitat:
Delphi-Quellcode:
aber das funktioniert nicht! Folgende Meldung:
Item:=TListItem.Create(Self);
[Pascal Fehler] Code1.pas(88 ): E2010 Inkompatible Typen: 'TListItems' und 'TForm1' und ich weiß nicht wieso! |
Re: ID3v2 wird nicht Ausgeführt - warum?
Zitat:
hier mal die ganze prozedur ^^
Delphi-Quellcode:
Mit freundlichen Grüßen
var
item: TListColumn; tracks: TListItem; sr: TSearchRec; i: integer; lArtist, lTitle, lAlbum, lYear, lComment, lTrackNo: string; dir: string; fn: string; begin listview1.ViewStyle := vsReport; listview1.Align := alClient; lArtist := ''; lTitle := ''; lAlbum := ''; lYear := ''; lComment := ''; lTrackNo := ''; for i := low(lvColumns) to high(lvColumns) do begin item := listview1.Columns.Add; item.Caption := lvColumns[i]; item.AutoSize := true; end; if paramstr(1) = '' then with TOpenDialog.Create(self) do begin if execute then dir := ExtractFilePath(Filename); end; if dir <> '' then if FindFirst(dir+'\*.mp3', faAnyFile, sr) = 0 then begin repeat if ReadID3v2Tag(sr.Name, lTitle, lArtist, lAlbum, lYear, lComment, lTrackNo) then begin tracks := listview1.Items.Add; with tracks do begin if lArtist <> '' then begin caption := lArtist; with subitems do begin add(lTitle); add(lAlbum); add(lYear); if lComment = '' then add('-') else add(lComment); add(lTrackNo); end; fn := ''; if lTrackNo <> '' then fn := '['+lTrackNo+'] '; if lArtist <> '' then fn := fn + trim(lArtist); if lTitle <> '' then fn := fn+' - '+trimleft(lTitle); RenameFile(sr.name, trim(fn+extractfileext(sr.name))) end; end; end; until FindNext(sr) <> 0; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:23 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