Hier der komplette Source: ...
Der Sort kommt bevor ich die StringList an das Memo zur Anzeige übergebe - es wird nur nicht sortiert.
Trenne Dateisuche/Datensammlung und Formatierung. Wenn ich deinen Quelltext richtig verstanden habe, möchtest du Folgendes (ohne Sortierung):
Delphi-Quellcode:
function FindPlayFiles(pmFileList: TStringList; const pmcPath: String; const pmcSearchMask: String = '*'; pmWithSubDirs: Boolean = True): Boolean;
const
SEARCH_OPTION: array[Boolean] of TSearchOption = (TSearchOption.soTopDirectoryOnly, TSearchOption.soAllDirectories);
begin
Result := False;
if pmFileList = Nil then Exit; //=>
if not TDirectory.Exists(pmcPath) then Exit; //=>
var files: TStringDynArray := TDirectory.GetFiles(pmcPath, pmcSearchMask, SEARCH_OPTION[pmWithSubDirs]);
if Length(files) > 0 then
begin
pmFileList.Clear;
pmFileList.AddStrings(files);
Result := True;
end;
end;
procedure FormatPlayList(pmFmtList: TStrings; const pmcRootDir: String; pmFileList: TStringList; pmStartNumber: Integer = 1);
begin
if pmFmtList = Nil then Exit; //=>
if pmFileList = Nil then Exit; //=>
if pmFileList.Count = 0 then Exit; //=>
pmFmtList.BeginUpdate;
try
var run, currentDir: String;
for var i: Integer := 0 to pmFileList.Count - 1 do
begin
run := TPath.GetDirectoryName(pmFileList[i]);
if currentDir <> run then
begin
currentDir := run;
pmFmtList.AddObject(Format('%.4d S: %s', [pmStartNumber, currentDir.Substring(Length(pmcRootDir))]), TObject(-1));
Inc(pmStartNumber);
end;
pmFmtList.AddObject(Format('%.4d F: %s', [pmStartNumber, TPath.GetFileName(pmFileList[i])]), TObject(i));
Inc(pmStartNumber);
end;
finally
pmFmtList.EndUpdate;
end;
end;
begin
SerienDB.Memo.Lines.Clear;
if FindPlayFiles(FFileList, FRootDir) then
FormatPlayList(SerienDB.Memo.Lines, FRootDir, FFileList);
Disclaimer: Der Entwurf ist nur eine Überarbeitung des Originals.
Bis bald...
Thomas