![]() |
FTP Client
Ich habe folgendes vor:
Ich möchte ein kleines tool schreiben, wo man sich auf einen server einloggt und man automatisch in ein von mir vorgebenes Verzeichnis gelangt, dort sollte man dann nur einen Ordner anlegen können und in diesen Ordner wechseln können sowie dann Bilder hochladen können, am besten indem man die makierten Bilder vom Desktop in das Programm zieht. Leider hab ich keine idee wie ich das anfangen kann. Vielleicht kann mir da einer ja mal tipps geben oder vielleicht gibt es sowas ja schon. |
Re: FTP Client
Hi
Zitat:
Das Anlegen genau eines Verzeichnisses und das automatische Anmelden sind eher ein Sicherheitsproblem auf dem Server als ein Programmierproblem auf der Client-Seite. Wie soll sich der Benutzer deines Programmes anmelden? Anonym mit Schreibrechten? Oder soll er sich selbst einen user account erzeugen, damit sein Verzeichnis geschützt ist? Wenn du es selbst programmieren willst, dann wirst du dich auch mit Drag&Drop von shell objects befassen müssen. Wenn nicht, so bin ich sicher, dass es (freie) Software zum Aufbau eines Fotoalbums im Web gibt. Hast du schon mal bei SourceForge danach recherchiert? Grüße vom marabu |
Re: FTP Client
erstmal vielen Dank für deine antwort...habe inzwischen angefangen und habe eine Verbindung und ausgabe mit dem Indy FTP erstellen können. Nun habe ich aber noch eine Frage zu
IdFTP1.List(DirectoryListBox.Items); ist es möglich diese Liste zu zerlegen? Also das Datum, der Name usw... |
Re: FTP Client
Klar doch.
Delphi-Quellcode:
marabu
procedure TDemoForm.ListButtonClick(Sender: TObject);
var l: TIdFtpListItems; i: integer; sl: TStringList; begin sl := TStringList.Create; // create raw data container idFTP.Connect(true, -1); // login idFTP.List(sl, '*', true); // get all entries with details l := idFTP.DirectoryListing; // get ref of parsed entries for i := l.Count - 1 downto 0 do // start on safe side if l[i].ItemType = ditDirectory // check for sub directories then sl[i] := l[i].FileName // keep dir entries else sl.Delete(i); // drop other entries idFTP.Disconnect; // logout // ListBox.Items.Assign(sl); // show directory names sl.Free; // drop raw data container end; PS: Indy 9 |
Re: FTP Client
vielen Dank werde ich testen, habe inzwischen noch eine andere Frage und zwar:
Ich habe eine Drag & Drop funktion eingebaut und wenn ich nun 1 Bild oder auch mehrere auf das Programm ziehe lädt das Programm die Bilder zwar hoch, aber das Programm reagiert in der Zeit nicht, wie kann ich das ändern?
Delphi-Quellcode:
procedure TForm1.WMDROPFILES (var Msg: TMessage);
var i, anzahl, size: integer; Dateiname: PChar; begin inherited; anzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, Dateiname, 255); for i := 0 to (anzahl - 1) do begin size := DragQueryFile(Msg.WParam, i , nil, 0) + 1; Dateiname:= StrAlloc(size); DragQueryFile(Msg.WParam,i , Dateiname, size); IdFTP1.Put(Dateiname, ExtractFileName(Dateiname)); ListBox1.items.add(StrPas(Dateiname)); StrDispose(Dateiname); end; DragFinish(Msg.WParam); end; |
Re: FTP Client
Mit
Delphi-Quellcode:
werden die anderen Prozesse ausgeführt, bevor dein Programm weitermacht.
Application.ProcessMessages
Alternativ könntest du für das Hochladen auch einen eigenen Thread verwenden. :) |
Re: FTP Client
vielen Dank, wie erstelle ich einen eigenen Thread? Hab sowas leider noch nicht gemacht.
|
Re: FTP Client
Als erstes musst du eine neue Klasse erzeugen, die du von TThread ableitest.
Delphi-Quellcode:
type
TFTPThread= class(TThread) public procedure Execute; override; end;
Delphi-Quellcode:
Im Deklarierungsteil musst du den Thread anlegen.
procedure TFTPThread.Execute;
begin // Befehle für den Thread // z. B. das Hochladen der Datei end;
Delphi-Quellcode:
Dann im Event den Thread starten.
var
FTPThread: TFTPThread;
Delphi-Quellcode:
FTPThread := TFTPThread.Create(true);
FTPThread.Resume; // Durch das Resume wird der Thread gestartet // Alternativ ein false als Parameter nehmen, // dann wird der Thread sofort gestartet und das "Resume" wird nicht gebraucht FTPThread.Destroy; // Destructor aufrufen Das war's mal ganz kurz. :) |
Re: FTP Client
Zitat:
Edit: Ups, sry, geht ja um was ganz anderes.. :roll: ..hab wieder mal nicht alles gelesen :wall: |
Re: FTP Client
vielen Dank dafür.
Aber ich habe
Delphi-Quellcode:
auf einen Button gelegt und wenn ich den drücke bekomme ich zum testen nichtmal eine showmessage ausgegeben. Ist da noch was falsch?
FTPThread := TFTPThread.Create(true);
FTPThread.Resume; // Durch das Resume wird der Thread gestartet // Alternativ ein false als Parameter nehmen, // dann wird der Thread sofort gestartet und das "Resume" wird nicht gebraucht FTPThread.Destroy; // Destructor aufrufen |
Re: FTP Client
Was hast du denn in die Execute-Procedure geschrieben?
|
Re: FTP Client
ja wie gesagt, zum testen erstmal eine showmessage('test'); Welche aber nicht angezeigt wird.
|
Re: FTP Client
Hi,
ich glaube, du kannst ShowMessage() nicht in Threads benutzen. Probier's doch mit etwas anderem, zum Beispiel der Form.caption... cu |
Re: FTP Client
Hi,
für den Anfang schlage ich dir vor, die bei Indy mitgelieferten Demos durchzusehen, speziell die für einen FTP-Up- bzw. -Download. Das wird Dir viele Fragen schon beantworten. Die Sache hat allerdings noch einen anderen Haken: Die Demos verwenden die quasi fest eingebauten FTP-Daten wie z.B. auch Dein FTP-Passwort. Es gibt aber Sniffer, die den FTP-Verkehr mitschreiben können und so auch an Deine Daten kommen. Eine Lösung wäre, anonymes FTP zu benutzen. PS: Ich hatte vor 2 Jahren ein ähnliches Problem wie Du. Zielstellung war es, Bilddaten von Kunden mittels eines möglichst einfachen Programms auf den Server meines Arbeitgebers zu bekommen. (sogenannter Internet Print Service) |
Re: FTP Client
Vielen Dank, eine Frage hab ich noch, wenn ich 120sekunden nix mache wird die verbindung geschlossen wie kann man das ändern?
|
Re: FTP Client
Eine Frage noch:
Ich habe eine Listbox wo ich eine oder mehrere Dateien einziehe...den up- download speed kann ich auch bestimmen, aber wie kann ich die Zeit für die gesamten dateien bestimmen, also bei 5 Dateien dauert es noch 5 minuten, die zeit müsste sich dann runterzählen. Wie kann man das anstellen, weil die zeit für eine datei * 5 geht irgendwie nicht, der zeigt zum ende der ersten datei dann auch wieder 0sec. an und fängt bei der 2ten Datei dann wieder von vorn an. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:55 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