Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Verzechniss: alle beinhaltenden Ordner ermitteln? (https://www.delphipraxis.net/119938-verzechniss-alle-beinhaltenden-ordner-ermitteln.html)

DeddyH 3. Sep 2008 15:28

Re: Verzechniss: alle beinhaltenden Ordner ermitteln?
 
Was übergibst Du denn als sList an die Prozedur? Und wieso als Var-Parameter?

LuCSteR 3. Sep 2008 15:34

Re: Verzechniss: alle beinhaltenden Ordner ermitteln?
 
Ich übergebe ihr ein nicht initialisiertes s:TSrings. Also "leer".
Stimmt, sList als var zu deklarieren war sinnlos. Aber daran haperts nicht.
Delphi-Quellcode:
ListSubDirs(TempDownloadDir, s);
Stimmt die Benutzung mit s nicht? Habe mit TStrings vorher noch nix gemacht. Allerdings scheint es keine Syntax Fehler zu geben...

DeddyH 3. Sep 2008 15:48

Re: Verzechniss: alle beinhaltenden Ordner ermitteln?
 
Du kannst entweder z.B. ComboBox.Items übergeben oder Dir eine Stringlist erstellen.
Delphi-Quellcode:
var sl: TStringlist;
begin
  sl := TStringlist.Create;
  try
    ListSubDirs(TempDownloadDir,sl);
    ...
  finally
    sl.Free;
  end;
end;

LuCSteR 3. Sep 2008 16:31

Re: Verzechniss: alle beinhaltenden Ordner ermitteln?
 
Irgendwie traurig, ich schlag mich den ganzen Nachmittag mit so einem trivialen Problem rum. Warum gibt es nicht einfach eine Standard Funktion, womit man ein Verzeichnis in ein anderes verschieben kann?

Das ist echt zum Mäuse melken.

Aufruf:
Delphi-Quellcode:
var
  i:integer;
  s:TStringList;
  h1, h2:string;

begin //alles in TempDownloadDir nach DownloadDir kopieren, danach TempDownloadDir löschen
      s:=TStringList.Create;
      ListSubDirs(TempDownloadDir, s);

      h1:=TempDownloadDir;
      //letzten Backslash abschneiden
      Delete(h1, Length(h1), 1);
     
      h2:=DownloadDir;
      //letzten Backslash abschneiden
      Delete(h2, Length(h2), 1);
     
      try
        for i:=0 to s.Count-1 do MoveDir(h1+s[i], h2+s[i]);
      finally
        s.Free;
      end;
     
      DeleteFile(h1);
end;
Das MoveDir funktioniert (getestet) zb. so MoveDir(h1, h2); einwandfrei...Nur nicht in der Schleife mit der StringListe...
Ich mache da morgen weiter und werd mal schaun, was überhaupt in der Liste drinne steht. Kein Bock jetzt mehr.

Danke für die Hilfe DaddyH.

DeddyH 3. Sep 2008 16:33

Re: Verzechniss: alle beinhaltenden Ordner ermitteln?
 
Hättest Du mal früher gesagt, was Du machen möchtest, hätte ich noch Hier im Forum suchenSHFileOperation als Alternative angeboten.

LuCSteR 3. Sep 2008 16:52

Re: Verzechniss: alle beinhaltenden Ordner ermitteln?
 
Die Suche habe ich auch schon kräftig durchforstet.
Ich erklär vll mal kurz mein Anliegen:

es gibt nen Download und nen TempDownload Ordner. TempDownload wird beim Programmstart erstellt und beim schließen wieder gelöscht. Das klappt. Jetzt will ich, das alle Ordner die sich in TempDownload befinden nach Download befördert werden (wenn dafür die Option vom Nutzer getroffen wurde). Das MoveDir funktioniert ja einwandfrei. Nur muss ich ja möglicherweise nicht nur einen Ordner im tempDownload verschieben, sondern auch mehrere, deswegen muss ich MoveDir nicht auf TempDownload, sondern auf die einzelnen Ordner anwenden. Dafür brauch ich wiederum deren Namen.
Und da ist mein Problem. Die Funktion für die Ordnernamenbestimmung funktioniert nicht. Kommen zwar keine Fehler aber es wird auch garnichts in die String-Liste geschrieben...Hab das jetzt mal getestet.

Naja und für meinen Fall gibts noch nix im Forum :)

Wie gesagt, bis morgen.

Trotzdem könnte vll nochmal jmd schaun, ob meine StringList-Item-Ansteuerung so richtig ist und funktioniert das überhaupt, das wenn die ListSubDirs einen TStrings erwartet aber eine TStringList bekommt? Wie gesagt kenn mich da leider garnicht aus.

Grüße

DeddyH 3. Sep 2008 17:12

Re: Verzechniss: alle beinhaltenden Ordner ermitteln?
 
TStringlist ist ein Nachkomme von TStrings, somit automatisch auch vom Typ TStrings.

LuCSteR 4. Sep 2008 08:54

Re: Verzechniss: alle beinhaltenden Ordner ermitteln?
 
Es werden keine Elemente in die StringListe gepackt. Der Count ist 0.

DeddyH 4. Sep 2008 09:03

Re: Verzechniss: alle beinhaltenden Ordner ermitteln?
 
Delphi-Quellcode:
procedure ListSubDirs(sDir: string; const sList: TStrings);
var Rec: TSearchRec;
begin
  sList.BeginUpdate;
  try
    sList.Clear;
    if FindFirst(IncludeTrailingPathDelimiter(sDir) + '*.*', faDirectory or faReadOnly or faHidden or faArchive, Rec) = 0 then
    begin
      repeat
        if ((Rec.Attr and faDirectory) = faDirectory) and (Rec.Name <> '.') and (Rec.Name <> '..') then
          sList.Add(Rec.Name);
      until FindNext(Rec) <> 0;
      SysUtils.FindClose(Rec);
    end;
  finally
    sList.EndUpdate;
  end;
end;
Ohne Gewähr, da aus dem Kopf getippt.

LuCSteR 4. Sep 2008 09:20

Re: Verzechniss: alle beinhaltenden Ordner ermitteln?
 
Okay, die Prozedur funktioniert. 1a!
Ich glaube mit der Delphi Hilfe wäre ich auch von alleine auf die ganzen fehlenden Bedingungen gekommen :S.
Aber so.
Naja vielen Dank. Jetzt komm ich endlich mit meinem wirklichen Problem weiter :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:31 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz