Ich bin jetzt soweit, dass es geht, beim wiedereinlesen ist alles ungeordnet und alle Ordner, die Dateien beinhalten sind alle Doppelt.
Hier der Code:
Delphi-Quellcode:
//Zum Erstellen eines Abbilds
var
AText, DirRead: String;
L: TStringList;
ANb, I: Integer;
begin
if SelectDirectory('Verzeichnis zum durchleuchten wählen', 'MyComputer', DirRead) = False then Exit;
InputQuery('Pfad ändern', 'Sie können den Pfad nun noch ändern', DirRead);
DirRead := SetPfad(DirRead, True);
L := TStringList.Create;
try
FileList(DirRead, '*.*', True, L);
for I := 0 to L.Count-1 do begin
AText := L[I];
if Pos('\.', AText) = Length(AText)-1 then begin
SetLength(AText, Length(AText)-2);
end;
ANb := ReadForm.CountSlashes(AText)-2;
L[I] := IntToStr(ANb)+'*]'+ExtractFileName(AText);
end;
if SDIa.Execute then L.SaveToFile(SDIa.FileName);
finally
L.Free;
end;
end;
//Und zum Wieder ansehen(Tree ist der TTreeView)
var
Indes: Array of Integer;
L: TStringList;
ALevel, LGes, LNb, I: Integer;
AItem, AText: String;
Start, Ende: Cardinal;
begin
if not ODia.Execute then Exit;
L := TStringList.Create;
try
L.LoadFromFile(ODia.FileName);
SetLength(Indes, L.Count+1);
for I := 0 to L.Count-1 do begin
AItem := L[I];
LGes := Length(AItem);
LNb := Pos('*]', AItem)-1;
ALevel := StrToInt(Copy(AItem, 1, LNb));
AText := Copy(AItem, LNb+3, LGes-LNb);
Indes[ALevel] := I;
if ALevel = 0 then Tree.Items.Add(NIL, AText) else
Tree.Items.AddChild(Tree.Items[Indes[ALevel-1]], AText);
end;
finally
L.Free;
end;
end;
Das es ungeordnet ist, ist nicht so schlimm, das einzige was mich noch stört und ich mir bis eben gerade noch die Zähne ausgebissen habe (ich weiß noch nicht wie): Wie bekomme ich die doppelten Ordner weg?
PS: Danke mirage, dass du so schnell Rückantwort schreibst, denn es liegt ja doch schon etwas zurück!
[Edit: Wichtig ist beim löschen, dass NICHT die Zeile gelöscht wird, die ohne mein SetLength(..) beim Einlesen das '\.' dahinter hätte!]