Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IDFtp + Download +Dir (https://www.delphipraxis.net/11601-idftp-download-dir.html)

horst 10. Nov 2003 13:34


IDFtp + Download +Dir
 
habe versucht mit:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
  stl : tstringlist;
begin
idftp1.Connect;
if idftp1.connected then
 begin
  stl:=tstringlist.Create;
 IdFTP1.List(DirectoryListBox.Items,'*.*', False);
  try
    for i := 0 to DirectoryListBox.items.count - 1 do
    begin
      stl.Add(DirectoryListBox.items.strings[DirectoryListBox.itemindex]);
      DirectoryListBox.ItemIndex:=DirectoryListBox.ItemIndex+1;
    end;
    idftp1.Get( stl,'c:\Test\'+ stl);
  finally
    stl.Free;
  end;
  idftp1.Disconnect
 end;
end;
ein komplettes ftp-verzeichnis downzuloaden...was nicht funktioniert.
mag mir jemand zeigen was ich falsch mache?

rebugger 10. Nov 2003 13:50

Re: IDFtp + Download +Dir
 
idftp1.Get( stl,'c:\Test\'+ stl); <= Nimmt .Get() denn ne StringList an ?

horst 10. Nov 2003 13:52

Re: IDFtp + Download +Dir
 
sorry hätte auch die fehlermeldung mitschicken sollen.
Zitat:

inkompatible typen string und tstringlist
wie ändere ich das?

grüsse ;)

scp 10. Nov 2003 14:16

Re: IDFtp + Download +Dir
 
Eine StringList kann bei get nicht verwendet werden. Probiers mal so z.B.:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
  stl : tstringlist;
begin
idftp1.Connect;
if idftp1.connected then
 begin
  stl := tstringlist.Create;
  try
    IdFTP1.List(stl, '*.*', False);
    DirectoryListBox.Items.AddStrings(stl);

    for i := 0 to stl.count - 1 do
    begin
      try
        idftp1.Get(stl[i], 'c:\Test\' + stl[i]);
      except
        on E: EIdException do // Hierfür musst du die unit IdException in uses eintragen.
          ShowMessage('FTP-Fehler' + #10 + E.Message); // Nur ein Beispiel, kannst die Fehler auch in ne Listbox oder in ein Label oder so übergeben.
        else
          raise;
      end;
    end;
  finally
    stl.Free;
  end;
  idftp1.Disconnect;
 end;
end;

horst 10. Nov 2003 14:22

Re: IDFtp + Download +Dir
 
perfekt...
nun sehe ich meine fehler...danke :balloon:

horst 10. Nov 2003 14:25

Re: IDFtp + Download +Dir
 
wenn diese dateien schon auf der platte sind gibts ne execption "dateien schon vorhanden"
wie kann ich das lösen?

sharkx 10. Nov 2003 14:31

Re: IDFtp + Download +Dir
 
If FileExists() -> skip ;P

horst 10. Nov 2003 14:35

Re: IDFtp + Download +Dir
 
ich bin nicht sicher wie ich das machen soll...
Delphi-Quellcode:
try
        idftp1.Get(stl[i], 'c:\Test\' + stl[i]);
         If FileExists(stl[i]) Then
       exit;
      except
      on E: EIdException do // Hierfür musst du die unit IdException in uses eintragen.
          ShowMessage('FTP-Fehler');
       else
funktioniert nicht...

scp 10. Nov 2003 14:54

Re: IDFtp + Download +Dir
 
FileExists musst du über das Get setzen und statt Exit; musst du Continue; verwenden, damit die Dateien, die danach kommen, noch geladen werden.

Exit --> verlässt die prozedur (in dem Fall Button1Click)
Continue --> geht zur nächsten Zahl in der for-Schleife

horst 10. Nov 2003 16:23

Re: IDFtp + Download +Dir
 
ich krieg das nicht eingefügt...finde auch nirgends ein passendes beispiel..
hilfe ;)

scp 10. Nov 2003 16:36

Re: IDFtp + Download +Dir
 
öhm... wo ist denn da das Problem? du musst doch nur zwei Zeilen von deinem Code vertauschen und da woe bei dir Exit; steht stattdessen Continue; hinschreiben?

Delphi-Quellcode:
   If FileExists(stl[i]) Then
      Continue;
   idftp1.Get(stl[i], 'c:\Test\' + stl[i]);

horst 10. Nov 2003 16:49

Re: IDFtp + Download +Dir
 
das funktioniert nicht ... deshalb

horst 10. Nov 2003 16:50

Re: IDFtp + Download +Dir
 
mittlerweile mache ich es so,
das mit dem fileexists funktioniert aber auch hier nicht..

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
  MyListing: TStringList;
begin
  if TransferringData then Form1.idFTP1.Abort;
  if Form1.IdFTP1.Connected then Form1.IdFTP1.Disconnect;
  try
    with IdFTP1 do begin
      Connect;
      if Connected then begin
        ChangeDir('/test/leer/');
        MyListing := TStringList.Create;
        List(MyListing, '*.txt', True);

        for i := 0 to DirectoryListing.Count - 1 do
          with DirectoryListing[i] do begin

            Application.ProcessMessages;
            ProgressBar1.Max := Size;
            Label1.Caption := 'Downloading ' + FileName + ' (' + IntToStr(Size) + ' bytes)';
            if FileExists(Filename) then
              Continue;
            Get(FileName, DestinationFolder + '\' + FileName, True, True);
          end;
        Disconnect;
        ProgressBar1.Max := 0;
        Label1.Caption := '';
      end; end;
  except;
  end;
end;

APP 10. Nov 2003 17:00

Re: IDFtp + Download +Dir
 
Hallo Horst,

ich kenne Get nicht auswendig, aber falls FileExists nicht funktioniert, dann daher, weil Du mit dieser
Funktion das File das Du mit Get in ein Verzeichnis speicherst prüfen solltest.

Delphi-Quellcode:
...
if FileExists(DestinationFolder + '\' + FileName) then
   Continue;
Get(FileName, DestinationFolder + '\' + FileName, True, True);
...
Probiere mal, sonst schreibe was nicht geht...

horst 10. Nov 2003 17:06

Re: IDFtp + Download +Dir
 
jajajajaja......
es klappt ;) ;)

doch nicht s. nächste seite...

horst 10. Nov 2003 17:08

Re: IDFtp + Download +Dir
 
ich war zu voreilig...nun läd der nix mehr runter, weil die dateien ja schon im ordner sind

scp 10. Nov 2003 17:22

Re: IDFtp + Download +Dir
 
Zum einen erst mal zu deinem neuen Code: Du hast
Delphi-Quellcode:
MyListing := TStringlist.Create;
try
finally
  MyListing.Free; // Das hier ist wichtig
end;
vergessen.

Zum anderen: Das bleibt natürlich dir überlassen. Entweder kannst du bei If FileExists() ja dann ein DeleteFile() einbauen oder du gibts der Datei einen neuen Namen mit RenameFile()

horst 10. Nov 2003 17:31

Re: IDFtp + Download +Dir
 
bigthx für deinen hinweis, wie überschreiben geht nicht?
ich lösche sie nun vorher ;)

scp 10. Nov 2003 17:46

Re: IDFtp + Download +Dir
 
Mit deinem neuen Code würde auch das gehen, dafür sorgt das erste true bei Get(). Wenn du die Dateien also immer nur überschreiben willst, kannst du das FileExists() wieder wegmachen, musste halt nur das erste true bei Get() dalasssen.

PS: Das zweite true bei Get() sorgt übrigens dafür, das eine existierende Datei, die noch nicht vollständig geladen wurde, an der Stelle weitergeladen wird, wo sie zuletzt aufgehört hat (Resume halt).

horst 10. Nov 2003 17:49

Re: IDFtp + Download +Dir
 
deine erklärungen kamen genau richtig... bigthx


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:05 Uhr.

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