Hallo
Ich habe folgendes Problem wenn ich mp3s in einer StringList schreibe und Sie dann auf ID3Tag Einträge überprüfe kommt ab und an mal der Fehler "ListenIndex überschreitet das Maximum (0)" Der Fehler tritt aber nur dann auf glaub ich zumindest, wenn die StringList "slMP3" zu viele Daten enthält. Lade ich zb: einen Ordner der ca. 4500 MP3s (einschließlich Unterordner) enthält klappt alles bestens. Versuch ich aber von einem Ordner zu laden der noch mehr mp3s (einschließlich Unterordner) enthält kommt der besagte Fehler. Andererseits wenn ich die for Schleife unten im Code ausklammer also nicht ausführen lasse sondern nur die StringList slMP3 mit MP3s befülle kommt der Fehler auch nicht egal vieviel MP3s sich im Ordner befinden. Der Fehler wird wohl in der Schleife stecken
Delphi-Quellcode:
//StringList slMP3 wird mit MP3s mit Pfadangabe gefüllt
FindAllFiles(fMain.slMP3,fVerzeichnis.DirectoryListBox1.Directory+'\','*.mp3', true, true, false);
for i := 0 to fMain.slMP3.Count - 1 do
begin
//ID3v1Tag auslesen
if fMain.ID3v1Tag.ReadFromFile(fMain.slMP3.Strings[i]) then
begin
with fMain.ID3v1Tag do
begin
fMain.slTmp1.Add(Artist);
fMain.slTmp1.Add(Album);
fMain.slTmp1.Add(Year);
fMain.slTmp1.Add(Title);
end;
end;
//ID3v2Tag auslesen
if fMain.ID3v2Tag.ReadFromFile(fMain.slMP3.Strings[i]) then
begin
with fMain.ID3v2Tag do
begin
fMain.slTmp2.Add(Artist);
fMain.slTmp2.Add(Album);
fMain.slTmp2.Add(Year);
fMain.slTmp2.Add(Title);
end;
end;
if (fMain.slTmp1.Strings[0] <> '') and (fMain.slTmp1.Strings[3] <> '') then
begin
sArtist := fMain.slTmp1.Strings[0];
sTitle := fMain.slTmp1.Strings[3];
fMain.lbMP3Ausgabe.Items.Add(IntToStr(i+1) + '.' + ' '+ sArtist +' - '+ sTitle);
end
else
begin
//wenn nichts vorhanden ist weiter und slTmp2 überprüfen
if (fMain.slTmp2.Strings[0] <> '') and (fMain.slTmp2.Strings[3] <> '') then
begin
sArtist := fMain.slTmp2.Strings[0];
sTitle := fMain.slTmp2.Strings[3];
fMain.lbMP3Ausgabe.Items.Add(IntToStr(i+1) + '.' + ' '+ sArtist +' - '+ sTitle);
end
else
begin
// wenn in slTmmp2 auch nichts enthalten ist dann nur Dateinamen eintragen
sDateiname := ExtractFileName(fMain.slMP3.Strings[i]);
fMain.lbMP3Ausgabe.Items.Add(IntToStr(i+1) + '.' + ' '+ ChangeFileExt(sDateiname,''));
end;//if slTmp2
end;//if slTmp1
fMain.slTmp1.Clear;
fMain.slTmp2.Clear;
end;//for