AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi idFTP - Listbox-multiselect download - Wie?
Thema durchsuchen
Ansicht
Themen-Optionen

idFTP - Listbox-multiselect download - Wie?

Ein Thema von DRPEnc · begonnen am 21. Jul 2004 · letzter Beitrag vom 25. Jul 2004
Antwort Antwort
Seite 1 von 2  1 2      
DRPEnc

Registriert seit: 20. Feb 2004
Ort: Noch unterm Mond
126 Beiträge
 
#1

idFTP - Listbox-multiselect download - Wie?

  Alt 21. Jul 2004, 22:49
Ich baue an einem FTP-Client.

Nun hänge ich an dem Multiselect-Download fest.

Meine Downloadbefehle sind bis jetzt folgende:

Delphi-Quellcode:
procedure TMainForm.DirectoryListBoxDblClick(Sender: TObject);
Var
  Name, Line : String;
begin
if edit4.text ='then exit;
  if not IdFTP1.Connected then exit;
  Line := DirectoryListBox.Items[DirectoryListBox.ItemIndex];
  if checkbox1.checked then begin
  Name := IdFTP1.DirectoryListing.Items[DirectoryListBox.ItemIndex].FileName+spezial.text
  end
  else
  Name := IdFTP1.DirectoryListing.Items[DirectoryListBox.ItemIndex].FileName;
  if IdFTP1.DirectoryListing.Items[DirectoryListBox.ItemIndex].ItemType = ditDirectory then begin
    //Change directory
    SetFunctionButtons(false);
    ChageDir(Name);
    SetFunctionButtons(true);
  end
  else begin
    try
      SaveDialog1.FileName := Name;
      savedialog1.InitialDir := edit4.text;
      if SaveDialog1.Execute then begin
        SetFunctionButtons(false);

        IdFTP1.TransferType := ftBinary;
        BytesToTransfer := IdFTP1.Size(Name);

        if FileExists(Name) then begin
          case MessageDlg('Datei existiert bereits. Willst Du mit dem Download weitermachen?',
            mtConfirmation, mbYesNoCancel, 0) of
            mrYes: begin
              BytesToTransfer := BytesToTransfer - FileSizeByName(Name);

            IdFTP1.Get(Name, SaveDialog1.FileName, false, true);
            end;
            mrNo: begin

              IdFTP1.Get(Name, SaveDialog1.FileName, true);
            end;
            mrCancel: begin
              exit;
            end;
          end;
        end
        else begin
        IdFTP1.Get(Name, SaveDialog1.FileName, false);
        end;
      end;
    finally
      SetFunctionButtons(true);
    end;
  end;
end;
DirectoryListBox.Items währe die Liste des Inhalts vom Server. Downloaden von den einzelnen Dateien ist möglich. Nun will ich aber erreichen, dass der User alle Dateien, die er benötigt zu markieren und mein Programm diese dann nacheinander downloaded. Nur bin ich noch nicht draufgekommen, wie ich das anstellen soll.

Was ich bis jetzt gemacht habe:

Die Variable Name ist das zur Zeit markierte Item von der DirectoryListBox.
Das InitialDir = edit4.text. Der User kann somit das Downloadverzeichnis festlegen.

Somit könnte ich z.B. folgenden Code anwenden:

IdFTP1.get(Name, Edit4.text+Name2, false);

Nur fehlt mir eine Routine, das nach Beendigung des Downloads der aktuellen Datei die nächste anschließend downgeloaded wird.
CU

DRPEnc
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: idFTP - Listbox-multiselect download - Wie?

  Alt 21. Jul 2004, 22:59
Nun ja. Wie wäre es die ausgewählten Einträge der Listbox in einer Schleife durch zu gehen und nach ein ander runter zu laden?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
DRPEnc

Registriert seit: 20. Feb 2004
Ort: Noch unterm Mond
126 Beiträge
 
#3

Re: idFTP - Listbox-multiselect download - Wie?

  Alt 21. Jul 2004, 23:12
Das ist eine Möglichkeit.

Nur weis ich noch nicht, wie ich die markierten Dateien nacheinander downloade.
Sie stehen ja schon in einer Listbox.

Ich müsste die Items warscheinlich in eine andere Listbox umkopieren und diese abarbeiten, oder liege ich falsch.
Ich durchsuche das Forum, vielleicht finde ich was passendes.

Delphi-Quellcode:
for i:=0 to listbox1.items.count-1 do
begin
IdFTP1.TransferType := ftBinary;
BytesToTransfer := IdFTP1.Size(listbox1.items[i]);
IdFTP1.Get(listbox1.items[i], SaveDialog1.FileName, true);
end;
... irgendwas fehlt noch ...

Delphi-Quellcode:
for i := 0 to ListBox1.Items.Count - 1 do begin
if ListBox1.Selected[i] then begin
IdFTP1.TransferType := ftBinary;
BytesToTransfer := IdFTP1.Size(listbox1.items[i]);
IdFTP1.Get(listbox1.Selected[i], SaveDialog1.FileName, true);
end;
... hab sie noch nicht ausprobiert. Kann das überhaupt funktionieren?
CU

DRPEnc
  Mit Zitat antworten Zitat
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#4

Re: idFTP - Listbox-multiselect download - Wie?

  Alt 21. Jul 2004, 23:35
So viel Ahnung hab ich von den Indies nicht, aber könnte man vielleicht versuchen für jede Datei nen eigenen Downloadthread aufzumachen dass die parallel laufen? Geht das mit den Indies?
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: idFTP - Listbox-multiselect download - Wie?

  Alt 21. Jul 2004, 23:42
Wieso umkopieren? Frag doch ab, ob der Eintrag ausgewählt ist und wenn ja dann lädst du es runter. Das mit den Threads würde ich erstmal lassen. Kann man ja immer noch machen, wenn man es erstmal so geschafft hat. Und wenn man etwas vorausschauend programmiert, dann ist das mit dem Thread in 10 Minuten implementiert.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
DRPEnc

Registriert seit: 20. Feb 2004
Ort: Noch unterm Mond
126 Beiträge
 
#6

Re: idFTP - Listbox-multiselect download - Wie?

  Alt 21. Jul 2004, 23:43
DAs mit dem Umkopieren war nur so ein Gedanke.

Kann ich was mit meinen Ansätzen irgendwas anfangen? (Sind im zweiten Post).
CU

DRPEnc
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: idFTP - Listbox-multiselect download - Wie?

  Alt 21. Jul 2004, 23:49
Würde es so machen: (Pseudocode)
Code:
function DownloadFile(const SrcFilename, DestFilename: String);
begin
  IdFTP:get(...);
end;

procedure ButtonClick;
var
  ...;
begin
  ...;
  for i := 0 to Listbox1.Items.Count - 1 do
  begin
    if Listbox1.Items[i].Selected then
      DownloadFile(SeverPath+Listbox1.Items.Strings[i], Localpath+Listbox1.Items[Strings[i]);
  end;
  ...;
Und wenn du es dann in einem Thread haben willst startest du den Thread in der Schleife und rufst in der Thread-Funktion einfach DownloadFile auf.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
DRPEnc

Registriert seit: 20. Feb 2004
Ort: Noch unterm Mond
126 Beiträge
 
#8

Re: idFTP - Listbox-multiselect download - Wie?

  Alt 22. Jul 2004, 11:13
Hi Luckie.

Ich hab mal versucht Deinen Code einzubauen.

Irgendwie stimmts vorn und hinten nicht:

Delphi-Quellcode:
function TMainForm.DownloadFile(const SrcFilename, DestFilename: String):String;
begin
IdFTP1.TransferType := ftBinary;
        BytesToTransfer := IdFTP1.Size(SrcFilename);

        if FileExists(SrcFilename) then begin
          case MessageDlg('Datei existiert bereits. Willst Du mit dem Download weitermachen?',
            mtConfirmation, mbYesNoCancel, 0) of
            mrYes: begin
              BytesToTransfer := BytesToTransfer - FileSizeByName(SrcFilename);

            IdFTP1.get(SrcFilename, DestFilename, false, true);
            end;
            mrNo: begin

              IdFTP1.get(SrcFilename, DestFilename, true);
            end;
            mrCancel: begin
              exit;
            end;
          end;
        end
        else begin
        IdFTP1.get(SrcFilename, DestFilename, false);
        end;
      end;


procedure TMainForm.DirectoryListBoxDblClick(Sender: TObject);
var
  Name, Line : String;
  i: integer;
begin
  Name := IdFTP1.DirectoryListing.Items[DirectoryListBox.ItemIndex].FileName;
  for i := 0 to Listbox1.Items.Count - 1 do
  begin
    if DirectoryListBox.Selected[i] then
      DownloadFile(Name, Edit4.text+'\'+Name);
        end;
  end;
Ich hoffe, das wenigstens die Funktion richtig ist. Der Downloadbefehl passt noch nicht.
Ich muss in diese Zeile den Integer einbauen:

Name := IdFTP1.DirectoryListing.Items[DirectoryListBox.ItemIndex].FileName; Ich bekomme jetzt immer folgende Fehlermeldungen:

Listindex out of bounds (20) bzw dass die Datei schon existiert, wenn ich sie nochmal runterlade. Ergo greift die Funktion irgendwie noch nicht richtig ...


Ich hatte auch ne Schleife hinbekommen, aber diese funktionierte nicht. Es wurde nichts herruntergeladen und sie hörte nicht auf. Da ich noch ein Schleifen-Noob bin muss ich mir die Schleifen genauer ansehen ...
CU

DRPEnc
  Mit Zitat antworten Zitat
DRPEnc

Registriert seit: 20. Feb 2004
Ort: Noch unterm Mond
126 Beiträge
 
#9

Re: idFTP - Listbox-multiselect download - Wie?

  Alt 23. Jul 2004, 22:34
Ich hab mich nochmal an den Computer gesetzt, aber nichts im Internet gefunden.
Mein FTP-Client basiert auf den IndyDemos.

Ich kann Luckies pseudo-Code leider irgendwie dort nicht einbauen. Es währe schön, wenn man mehre Dateien nacheinander downloaden kann. Ich dreh mich irgendwie im Kreis. Bei mir hagelts nur noch Fehlermeldungen.

Vielleicht findet einer von Euch ne Lösung. Ich such weiter im Netz ...
CU

DRPEnc
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#10

Re: idFTP - Listbox-multiselect download - Wie?

  Alt 23. Jul 2004, 23:00
das ftp protocol ist nicht geschaffen für multi downloading

das heist es muss jeder download thread sich jeweils selbst einloggen
und das wird bei den meisten servern probleme geben da multibles einloggen von derselben IP oft gesperrt ist.. bzw userlimit herrscht..
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:35 Uhr.
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