Gehört zwar nicht zum Thema aber: Wie kann ich alle fehlenden Pfade erstellen?
Z.b. so stelle ich es mir vor:
Delphi-Quellcode:
Pfad := 'C:\Testpfad1\Testpfad2\Testpfad3\Test.txt';
ErstellePfad(Pfad);
Und dass danach Testpfad1 - 3 erstellt sind.
Wie bekomme ich das hin?
Hier meine versuchs-Funktion:
Delphi-Quellcode:
procedure ErstellePfade(Pfad: String);
var
StringArray : TStringDynArray; // Eigentlich nur ein Array of String
i1, i2 : Integer;
S1 : String;
begin
StringArray := Explode('\', Pfad);
For i1 := 0 to Length(StringArray) - 1 do
begin
If i1 > 0 then
begin
S1 := 'C:';
If i1 > 1 then
For i2 := 1 to i1-1 do
begin
S1 := S1 + '\' + StringArray[i2];
ShowMessage('Zwischenpfad: ' + S1);
end
else
S1 := S1 + '\';
For i2 := 1 to Length(StringArray) - 1 do
begin
If not DirectoryExists(S1 + StringArray[i2]) then
CreateDir(S1 + StringArray[i2]);
ShowMessage('Created: '+ S1 + StringArray[i2]);
end;
end;
end;
end;
Da erstellt er mir aber nur unter C:\ die ganzen Ordner...
Wie mache ich das anders?
Achso, hier noch die Explode funktion:
Delphi-Quellcode:
function Explode(const Separator, S: string; Limit: Integer = 0):
TStringDynArray;
var
SepLen : Integer;
F, P : PChar;
ALen, Index : Integer;
begin
SetLength(Result, 0);
if (S = '') or (Limit < 0) then
Exit;
if Separator = '' then
begin
SetLength(Result, 1);
Result[0] := S;
Exit;
end;
SepLen := Length(Separator);
ALen := Limit;
SetLength(Result, ALen);
Index := 0;
P := PChar(S);
while P^ <> #0 do
begin
F := P;
P := StrPos(P, PChar(Separator));
if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then
P := StrEnd(F);
if Index >= ALen then
begin
Inc(ALen, 5); // mehrere auf einmal um schneller arbeiten zu können
SetLength(Result, ALen);
end;
SetString(Result[Index], F, P - F);
Inc(Index);
if P^ <> #0 then
Inc(P, SepLen);
end;
if Index < ALen then
SetLength(Result, Index); // wirkliche Länge festlegen
end;
MFG