Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi [Indy/FTP]Problem mit Datei runterladen (https://www.delphipraxis.net/67845-%5Bindy-ftp%5Dproblem-mit-datei-runterladen.html)

NeMesis44 20. Apr 2006 18:32


[Indy/FTP]Problem mit Datei runterladen
 
Hallo Delphipraxis

Ich bin hier neu und hab ein Problem mit meinem FTP Client

Ich möchte gerne wenn mann auf eine Datei klickt das die sich runterladet und wenn auf einen Ordner klickt das er dann in den Ordner geht das geht ja soweit nur nicht beides zusammen :(

Hier mein Source :

Delphi-Quellcode:
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdFTP, MPlayer, BassdllPlayer, ComCtrls;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button1: TButton;
    Button2: TButton;
    GroupBox2: TGroupBox;
    Button3: TButton;
    Panel1: TPanel;
    IdFTP1: TIdFTP;
    BassdllPlayer1: TBassdllPlayer;
    Button4: TButton;
    SaveDialog1: TSaveDialog;
    OpenDialog1: TOpenDialog;
    Button5: TButton;
    ProgressBar1: TProgressBar;
    Edit4: TEdit;
    ListBox2: TListBox;
    SaveDialog2: TSaveDialog;
    Button6: TButton;
    Button7: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char);
    procedure Edit3KeyPress(Sender: TObject; var Key: Char);
    procedure Button4Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure ListBox2DblClick(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation


{$R *.dfm}

function IsFile(const Filename : String) : Boolean;
var
  IsFile: Boolean;
begin
  if FileExists(Filename) then
  begin
    Result := true;
  end
  else
  begin
    Result := false;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
IDFTP1.Host := edit1.text;
IDFTP1.Username := edit2.text;
IDFTP1.Password := edit3.text;
IDFTP1.Passive := true;
IDFTP1.Connect();
idftp1.list (listbox2.items,'',false);
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  BassDLLPlayer1.LoadFromFile('C:\Dokumente und Einstellungen\Bass Sultan\Eigene Dateien\sound1.wav');
    BassDLLPlayer1.Volume := 90;
      BassDLLPlayer1.play;
end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
  BassDLLPlayer1.LoadFromFile('C:\Dokumente und Einstellungen\Bass Sultan\Eigene Dateien\sound1a.wav');
    BassDLLPlayer1.Volume := 90;
      BassDLLPlayer1.play;
end;

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
  BassDLLPlayer1.LoadFromFile('C:\Dokumente und Einstellungen\Bass Sultan\Eigene Dateien\sound1.wav');
    BassDLLPlayer1.Volume := 90;
      BassDLLPlayer1.play;
end;

procedure TForm1.Button4Click(Sender: TObject);
  var s:string;
begin
 s:='New Folder';
  if inputQuery('New Folder','New Folder Name',s) then
    begin
      idftp1.MakeDir(s);
    end;
    IdFTP1.List(ListBox2.Items);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
idftp1.Disconnect;
listbox2.Clear;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
 if openDialog1.Execute then
    begin
        idftp1.Put(OpenDialog1.FileName,extractFilename(opendialog1.FileName));
    IdFTP1.List(ListBox2.Items);
    end;
end;



procedure TForm1.ListBox2DblClick(Sender: TObject);
begin
if Listbox2.ItemIndex <> - 1 then
  begin
   if IsFile(ListBox2.Items[ListBox2.ItemIndex]) then // Hier ist es eine Datei
    begin
      // Hier kommt dein Code zum eine Datei runterzuladen
    end
    else
    begin
      IDFTP1.ChangeDir(Listbox2.Items[Listbox2.ItemIndex]); // Verzeichnis wechseln
      idftp1.list(listbox2.items,'',false);
    end;
  end;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
IdFTP1.ChangeDir(Edit4.Text);
idftp1.list(listbox2.items,'',false);
end;

procedure TForm1.Button7Click(Sender: TObject);
begin

IdFTP1.ChangeDir('..');
idftp1.list(listbox2.items,'',false);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
edit1.text := 'ftp.*********.**.funpic.de';
edit2.text := '*********';
edit3.text := '*********';
end;

end.
Hoffe ihr könnt mir helfen

MFG Combi

marabu 20. Apr 2006 19:05

Re: [Indy/FTP]Problem mit Datei runterladen
 
Herzlich willkommen in der Delphi-PRAXiS, Combi.

Fein, dass du etwas Code zu deinem Problem zeigst, aber schade, dass du Namen wie Button1 anstelle ConnectButton als Namen für deine UI-Komponenten verwendest. Da muss man deinen Code sehr lange studieren, bevor man einen Überblick hat.

Deine Funktion IsFile() ist eigentlich nicht besonders hilfreich, denn sie macht genau dasselbe wie FileExists(). Und im event handler ListBox2DblClick() hilft sie dir schon garnicht. Dort prüfst du, ob eine Datei auf deinem Client existiert, wo du doch eigentlich nur unterscheiden willst, ob der angeklickte Namen ein Verzeichnis oder eine Datei ist. Existieren sollte er schon, sonst hätte das FTP LIST command ihn dir nicht zurückgeliefert. Die Unterscheidung fällt dir leichter, wenn du das Listing mit Details anforderst. Dann hat jedes Item einen ItemType, der dir sagt, ob es sich um eine Datei handelt.

Herunterladen kannst du die Datei schließlich mit IdFTP.Get(). Das funktioniert ähnlich wie Put(), was du ja schon erfolgreich einsetzt.

Freundliche Grüße vom marabu

NeMesis44 20. Apr 2006 19:12

Re: [Indy/FTP]Problem mit Datei runterladen
 
Danke für deine schnelle Antwort. fühl mich schon richtig wohl hier :)

Ich bin zu faul die Buttons usw zu benennen :roll: :oops: :lol:

Ja das Problem ist der will dann auch die Ordner runterladen :(

MFG Combi

marabu 20. Apr 2006 19:31

Re: [Indy/FTP]Problem mit Datei runterladen
 
Warum dein Code auch die Ordner runterladen will, das kann ich so nicht sehen - aber ich kann dir etwas Code zeigen, der das LIST command mit Details verwendet: klick

marabu

NeMesis44 20. Apr 2006 22:18

Re: [Indy/FTP]Problem mit Datei runterladen
 
Kenn ich schon hilft mir aber nix hab aber schon wieder ne andere Frage :lol: :lol:

Wie kann mann nur Ordner anzeigen und wie kann mann nur Datein anzeigen da wäre mein Problem teoretisch auch schon gelöst :)

MFG Combi

gmc616 21. Apr 2006 03:36

Re: [Indy/FTP]Problem mit Datei runterladen
 
Ich bin zwar nicht der Typ der auf die :dp: hinweißt -> Eine Frage, einen Thread. ...

Wie auch immer.
Zum Auflisten der Directory gibt es so schöne Methoden wie Delphi-Referenz durchsuchenIdFTP.List und Delphi-Referenz durchsuchenIdFTP.DirectoryListing.
Eigendlich sollte IdFTP.DirectoryListing alles Nötige liefern um zwischen Files, Directories und Links unterscheiden zu können.
Allerdings bringen unterschiedliche FTP-Server bei dem FTP-Commando 'LIST' durchaus unterschiedliche Listen zurück.
Es gibt z.B. FTP-Server die auf IdFTP.DirectoryListing garnix zurück senden ( IdFTP.DirectoryListing.Count=0 !!).
Dann mußt du mit IdFTP.List die einzelnen Items (Strings) auseinander nehmen.

Meine Erfahrung. Wer's besser weiß soll mich berichtigen.

Grüße
gmc


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:47 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