Zitat von
Nils_13:
Ok, das bringt mich aber nicht ganze weiter, da ich dann ja nur den Namen der Datei habe, aber nicht das Verzeichniss. Ich lade ja eine m3u mit LoadFromFile, jetzt muss mein Programm natürlich noch herausbekommen wo die Datei liegt.
Die Listbox mit loadfrom file zu laden ist nicht sehr gut, wie du bei wikipedia gelesen hast gibt es auch noch zeilen mit #. Am besten parset du die m3u datei erst einmal und lädst sie dann in eine liste aus der du die listbox dann 'belädst'. In etwa so:
Delphi-Quellcode:
uses ... Contnrs;
type
tm3uitem = class(TPersistent)
private
fEXTINF: string;
ffilename: string;
public
function getfullfilename: string;
function getmp3file: string;
published
property EXTINF: string read fEXTINF write fEXTINF;
property FileName: string read ffilename write ffilename;
end;
...
var olist: tobjectlist;
...
{ tm3uitem }
function tm3uitem.getfullfilename: string;
begin
result:=ExpandFileName(ffilename);
end;
function tm3uitem.getmp3file: string;
begin
result:=extractfilename(ffilename);
end;
procedure tolistbox(box: tlistbox;olist: tobjectlist);
var
i:integer;
begin
for i:=0 to olist.Count-1 do begin
box.Items.Add((olist[i]as tm3uitem).getmp3file);
end;
end;
function getfilenamebyindex(i:integer;olist: tobjectlist):string;
begin
result:= (olist[i]as tm3uitem).getfullfilename;
end;
procedure loadm3u;
var
slist:tstringlist;
i:integer;
item:tm3uitem;
s,filename:string;
begin
filename:='deine.m3u';
olist.Clear;
SetCurrentDir(FileName); // Damit relative pfad angaben geladen werden können wichtig!!!!
slist:=tstringlist.Create;
try
slist.LoadFromFile(FileName);
for i:=0 to slist.count-1 do begin
if trim(slist[i])<>'#EXTM3U' then begin // erste zeile nicht beachten
s:= slist[i];
if length(s)>0 then
if s[1]<>'#' then begin // # Zeilen nicht beachten
item:=tm3uitem.Create();
item.filename:=slist[i]; // dateinamen hinzufügen
if (slist[i-1][1]='#')and(trim(slist[i-1])<>'#EXTM3U') then begin
item.EXTINF:=slist[i-1]; // idtag info hinzufügen falls vorhanden
end;
olist.add(item);
end;
end;
end;
finally
slist.Free;
end;
end;
end;