Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi automatisches verschicken einer datei (https://www.delphipraxis.net/20583-automatisches-verschicken-einer-datei.html)

Paul 20. Apr 2004 01:38


automatisches verschicken einer datei
 
hi,

versuche gerade ein prog zu coden welches automatisch eine log datei aller std. auf ein server transferiert.

den timer hab ich gesetzt, steht auf false soll aber beim programm start auf true gesetzt werden.

meine frage jetzt ist form.create richtig um den timer bei programmstart auf true zusetzen???
versenden geht auch noch nicht so recht :( wie sag ich den prog das er die datei aus dem ordner nehmen soll wo das prog selber drin liegt, ohne über ein button zu gehen.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdAntiFreezeBase, IdAntiFreeze, ExtCtrls,
  IdComponent, IdTCPConnection, IdTCPClient, IdFTP, StdCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    IdAntiFreeze1: TIdAntiFreeze;
    IdFTP1: TIdFTP;
    Label1: TLabel;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Timer1: TTimer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
timer1.enabled := true;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin

IdFTP1.Host := '192.168.0.1';
IdFTP1.Username := 'paul';
IdFTP1.Password := '20';
IdFTP1.Connect;
IdFTP1.ChangeDir('/');

IdFTP1.Put('log.log');
IdFTP1.Quit;
IdFTP1.Disconnect;
end;

end.
danke schonmal für eure hilfe :)

mfg Paul

ims 20. Apr 2004 08:00

Re: automatisches verschicken einer datei
 
hi paul

verständlich dass er die datei nicht schickt, er weiss ja nicht woher nehmen. wenn die datei wie beschrieben im gleichen ordner wie die exe liegt, kannst du folgendes verwenden:

Delphi-Quellcode:
IdFTP1.Put(ExtractFilePath(paramstr(0)) + 'log.log')
damit bekommt idFTP den gesamten pfad deines log-files.


zu deiner timer-frage (ich bin mir nicht ganz sicher wie du es meinst):
du startest dein programm am morgen (oder sonst wann) und dann lässt du es den ganzen tag laufen?
wenn ja, sollte das problem mit dem timer gar kein problem sein :). das müsste eigentlich funktionieren.


gruss, dave

Paul 20. Apr 2004 21:10

Re: automatisches verschicken einer datei
 
hmmm

irgendwie versendet er immer noch nix. kann das eventuell am timer liegen??

mfg

a.vollmer 20. Apr 2004 21:45

Re: automatisches verschicken einer datei
 
wie goch hast du den timer denn stehen?


Alex

Paul 20. Apr 2004 22:13

Re: automatisches verschicken einer datei
 
zum testen auf = interval:10

bei events - on timer = formcreate

mfg

flomei 20. Apr 2004 22:15

Re: automatisches verschicken einer datei
 
das heisst alle 10ms?
Probier doch mal eine Minute oder 5 Minuten oder so...
Vielleicht ist er einfach zu langsam um das zu verarbeiten... ;)

MfG Florian :hi:

a.vollmer 20. Apr 2004 22:20

Re: automatisches verschicken einer datei
 
versuchs doch mal so...

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
timer1.interval := 300000;
timer1.enabled := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
IdFTP1.Host := 'ftp.domain.de';
IdFTP1.User := 'benutzername';
IdFTP1.Password := 'password';
IdFTP1.Connect;
IdFTP1.ChangeDir('/');

IdFTP1.Put('c:\test.txt','test.txt');
IdFTP1.Quit;
IdFTP1.Disconnect;
end;
Gruß

Alex

Paul 22. Apr 2004 00:14

Re: automatisches verschicken einer datei
 
irgendwas stimmt nicht, der versendet immer noch nicht das files.

Code:
procedure TForm1.Timer1Timer(Sender: TObject);
begin

IdFTP1.Host := 'ip';
//IDFTP1.passive := false;
IdFTP1.Username := 'user';
IdFTP1.Password := 'pass';
IdFTP1.Connect;
IdFTP1.ChangeDir('/');
//IdFTP1.TransferType := ftBinary;

IdFTP1.Put(ExtractFilePath(paramstr(0)) + 'log.log');
IdFTP1.Quit;
IdFTP1.Disconnect;
end;
wie gesagt das file liegt im selben ordner wie das prog. das prog soll sich automatisch das file suchen und versenden.

Basilikum 22. Apr 2004 07:37

Re: automatisches verschicken einer datei
 
versuche mal:
Code:
[..]
IdFTP1.Put(ExtractFilePath(paramstr(0)) + 'log.log','log.log');
[..]

Jens Schumann 22. Apr 2004 07:58

Re: automatisches verschicken einer datei
 
Zitat:

Zitat von flomei
das heisst alle 10ms?
Probier doch mal eine Minute oder 5 Minuten oder so...
Vielleicht ist er einfach zu langsam um das zu verarbeiten... ;)

MfG Florian :hi:

Ein Interval von weniger als 52 kann der Delphi Timer nicht auflösen.
Die Begründung habe ich mal gelesen aber leider wieder vergessen.

ims 22. Apr 2004 07:59

Re: automatisches verschicken einer datei
 
nur mal so, weiss nicht ob so was möglich ist:

könnte es sein, dass du die übertragung abbrichst, bevor das file drüben ist? du schliesst die verbindung ja sofort wieder...


gruss, (ein unsicherer) dave

shmia 22. Apr 2004 10:04

Re: automatisches verschicken einer datei
 
Ihr müsst natürlich prüfen, ob die lokale Datei überhaupt existiert.
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
   srcFile: string; // Und nicht so geizig mit lokalen Variablen sein!!!
begin
   srcFile := 'log.log';
   if not FileExists(srcFile) then
   begin
      Caption := Format('Datei %s nicht gefunden', [srcFile]);
      Exit;
   end;

   ....
   IdFTP1.Put(srcFile);
   ....
end;
Und zusätzlich könnte man prüfen, ob die Datei noch im Zugriff ist:
Delphi-Quellcode:
function FileIsClosed(const filename:string):Boolean;
var
   hnd: THandle;
begin
   hnd := CreateFile(PChar(filename), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

   result := hnd <> INVALID_HANDLE_VALUE;

   CloseHandle(hnd);
end;
Ausserdem muss man natürlich die Events von IdFTP1 benutzen (Zumindest bei OnConnect).

Paul 23. Apr 2004 00:49

Re: automatisches verschicken einer datei
 
besten dank es funktioniert jetzt :) lag vielleicht wirklich am zu schnellem timer :)

ich will ja dieses prog auf ein server legen. dazu muss man ja die execute progarmmieren damit man das prog starten kann. hat das schon mal einer gemacht ???

mfg Paul

Luckie 23. Apr 2004 02:21

Re: automatisches verschicken einer datei
 
Die was muss man programmieren? Du bist dir bewußt, dass ein solches Delphi Programm nur auf einen Windows Server läuft?6 Und falls es nicht dein privater Server ist, glaube ich kaum, dass der Webhoster eigene Programme zu läßt.

Paul 23. Apr 2004 16:07

Re: automatisches verschicken einer datei
 
doch ich hab ein gemieteten server mit root zugriff und da kann man programme starten :)


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