AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ID3v2 wird nicht Ausgeführt - warum?

Ein Thema von Flom · begonnen am 12. Feb 2007 · letzter Beitrag vom 13. Feb 2007
Antwort Antwort
Seite 1 von 2  1 2      
Flom

Registriert seit: 19. Sep 2006
126 Beiträge
 
#1

ID3v2 wird nicht Ausgeführt - warum?

  Alt 12. Feb 2007, 20:58
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:
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;
Start des Programmes
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
Id3v1Tag:=TId3v1Tag.Create;
Id3v2Tag:=TId3v2Tag.Create;
end;
bei FormDestroy wirds wieder frei gegeben

und zu guter letzt die Suche selbst

Delphi-Quellcode:
procedure TForm1.BtnSucheClick(Sender: TObject);
begin
ListView1.Clear;
CreateFileList(quelle + '\','mp3', CheckBox1.Checked);
end;
Habe diesmal auf eine Sortierung bisher verzichtet! (Programm ist neu Entwickelt

Grüße!
Ein wahrhaft großer Mann wird weder einen Wurm zertreten noch vor dem Kaiser kriechen.

Benjamin Franklin
17.01.1706 - 17.04.1790
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: ID3v2 wird nicht Ausgeführt - warum?

  Alt 12. Feb 2007, 21:18
Mach mal vor mp3 einen Punkt also .mp3
CreateFileList(quelle + '\','.mp3', CheckBox1.Checked);
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Flom

Registriert seit: 19. Sep 2006
126 Beiträge
 
#3

Re: ID3v2 wird nicht Ausgeführt - warum?

  Alt 12. Feb 2007, 21:36
Zugriffsverletzung bei
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
Ein wahrhaft großer Mann wird weder einen Wurm zertreten noch vor dem Kaiser kriechen.

Benjamin Franklin
17.01.1706 - 17.04.1790
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
847 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: ID3v2 wird nicht Ausgeführt - warum?

  Alt 13. Feb 2007, 08:34
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 Item := TListItem.Create; , bevor man die Eigenschaften setzt?
  Mit Zitat antworten Zitat
Benutzerbild von p0w3r5tr34m3r
p0w3r5tr34m3r

Registriert seit: 18. Aug 2003
Ort: Monheim am Rhein
153 Beiträge
 
RAD-Studio 2009 Pro
 
#5

Re: ID3v2 wird nicht Ausgeführt - warum?

  Alt 13. Feb 2007, 08:55
stream := TFileStream.Create(dir + sr.name, fmOpenRead or fmShareDenyWrite); sr.name würde vollkommen reichen weil es schon den kompletten Pfad zurückgibt


Mit freundlichen Grüßen
Florian Cülter
ich bin ein notorischer alles-klein-schreiber!

der 100. Beitrag nach 3 Jahren 25 Wochen und einem Tag
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#6

Re: ID3v2 wird nicht Ausgeführt - warum?

  Alt 13. Feb 2007, 09:18
Hallo,
Zitat von p0w3r5tr34m3r:
stream := TFileStream.Create(dir + sr.name, fmOpenRead or fmShareDenyWrite); sr.name würde vollkommen reichen weil es schon den kompletten Pfad zurückgibt
das stimmt nicht, und es wäre auch unsinnig, weil FindFirst/FindNext immer in einer Verzeichnisebene arbeiten. Der Pfad für alle gelieferten Einträge ist somit identisch und er sollte der Applikation bekannt sein.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von p0w3r5tr34m3r
p0w3r5tr34m3r

Registriert seit: 18. Aug 2003
Ort: Monheim am Rhein
153 Beiträge
 
RAD-Studio 2009 Pro
 
#7

Re: ID3v2 wird nicht Ausgeführt - warum?

  Alt 13. Feb 2007, 11:01
in meinem Programm klappt es aber wunderbar...

Delphi-Quellcode:
...
if FindFirst(dir+'\*.mp3', faAnyFile, sr) = 0 then begin
    repeat
      if ReadID3v2Tag(sr.Name, lTitle, lArtist, lAlbum, lYear, lComment, lTrackNo) then begin
...
Ich nutze übrigens die Komponente von muetze
Florian Cülter
ich bin ein notorischer alles-klein-schreiber!

der 100. Beitrag nach 3 Jahren 25 Wochen und einem Tag
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#8

Re: ID3v2 wird nicht Ausgeführt - warum?

  Alt 13. Feb 2007, 12:39
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:
...
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
...
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.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Flom

Registriert seit: 19. Sep 2006
126 Beiträge
 
#9

Re: ID3v2 wird nicht Ausgeführt - warum?

  Alt 13. Feb 2007, 14:41
Zitat von Gausi:
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 Item := TListItem.Create; , bevor man die Eigenschaften setzt?
Wenn dann Item:=TListItem.Create(Self); aber das funktioniert nicht! Folgende Meldung:
[Pascal Fehler] Code1.pas(88 ): E2010 Inkompatible Typen: 'TListItems' und 'TForm1'

und ich weiß nicht wieso!
Ein wahrhaft großer Mann wird weder einen Wurm zertreten noch vor dem Kaiser kriechen.

Benjamin Franklin
17.01.1706 - 17.04.1790
  Mit Zitat antworten Zitat
Benutzerbild von p0w3r5tr34m3r
p0w3r5tr34m3r

Registriert seit: 18. Aug 2003
Ort: Monheim am Rhein
153 Beiträge
 
RAD-Studio 2009 Pro
 
#10

Re: ID3v2 wird nicht Ausgeführt - warum?

  Alt 13. Feb 2007, 15:12
Zitat von Hawkeye219:
Natürlich funktioniert es - wenn die Dateien im aktuellen Verzeichnis liegen. [...]
habe aber nicht das aktuelle verzeichnis geändert.. lediglich habe ich der var dir einen wert zugewiesen
hier mal die ganze prozedur ^^

Delphi-Quellcode:
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;
Mit freundlichen Grüßen
Florian Cülter
ich bin ein notorischer alles-klein-schreiber!

der 100. Beitrag nach 3 Jahren 25 Wochen und einem Tag
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz