Hallo Forum,
Ich möchte in meinem Programm ein paar Dateien nebenher hochladen. Dazu habe ich einen einfachen Thread programmiert.
Leider springt er beim Aufruf von
ftp.Connect; einfach aus der Methode, ohne
Exception, als hätte ich exit; aufgerufen.
Hier der Quelltext des Threads:
Delphi-Quellcode:
unit uFTPThread;
interface
uses
Classes, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdExplicitTLSClientServerBase, IdFTP;
type
TFTPThread =
class(TThread)
private
{ Private-Deklarationen }
ftp : TIdFTP;
fIP :
string;
fPort : integer;
fUser, fPassword :
string;
fActive : boolean;
fTubeFile, fUserFile :
string;
procedure UpdateUsers;
procedure UpdateTubes;
protected
procedure Execute;
override;
public
property Host :
string read fIP
write fIP;
property Port : integer
read fPort
write fPort;
property Username :
string read fUser
write fUser;
property Password :
string read fPassword
write fPassword;
property Userfile :
string read fUserfile
write fUserfile;
property Tubefile :
string read fTubefile
write fTubefile;
property Active : boolean
read fActive
write fActive;
end;
implementation
{ TMachineThread }
uses
SysUtils, IdFTPCommon;
procedure TFTPThread.Execute;
begin
ftp := TIdFTP.Create(
nil);
// Binary Transfer
ftp.TransferType := ftBinary;
if Active
then
begin
try
ftp.Host := fIP;
ftp.Port := 21;
ftp.Username := fUser;
ftp.Password := fPassword;
ftp.AutoLogin := true;
ftp.Connect;
ftp.Quote('
gtwr');
ftp.ChangeDir('
Directory');
if fUserFile <> '
'
then
begin
UpdateUsers;
end;
sleep(100);
if fTubeFile <> '
'
then
begin
UpdateTubes;
end;
sleep(100);
ftp.Disconnect;
end;
ftp.Free;
end;
procedure TFTPThread.UpdateTubes;
begin
fTaskname := '
Aktualisiere Schlauchdatei';
Synchronize(setTaskname);
ftp.Put(fTubefile,'
SCHLAUCH.CSV');
end;
procedure TFTPThread.UpdateUsers;
begin
fTaskname := '
Aktualisiere Benutzerdatei';
Synchronize(setTaskname);
ftp.Put(fUserfile,'
USER.CSV');
end;
end.
Aufgerufen habe ich es so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
t : TFTPThread;
begin
t := TFTPThread.Create(true);
t.Host := '192.169.178.20';
t.Port := 21;
t.Username := 'User';
t.Password := 'password';
t.Userfile := 'C:\temp\user.txt';
t.Tubefile := 'C:\temp\tube.txt';
t.Active := true;
t.Resume;
end;