Einzelnen Beitrag anzeigen

Destroyer446

Registriert seit: 17. Jan 2011
67 Beiträge
 
#12

AW: Access violation bei dynamischen Arrays

  Alt 14. Jun 2011, 15:07
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
  Mit Zitat antworten Zitat