Dateidatum auf FTP-Server ermitteln

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
hebeyer
Beiträge: 2
Registriert: Di 4. Feb 2020, 18:58

Dateidatum auf FTP-Server ermitteln

Beitrag von hebeyer »

Hallo :)

Vielleicht könnt ihr mir ja bei einem Problem helfen.
Mit der folgenden Funktion lade ich von einem FTP-Server eine mir bekannte Datei, die auch immer den selben Dateinamen hat herunter (uses WinInet):

Code: Alles auswählen

 
function getfile(server, username, password, localfile, remotefile: string; port: word = 21): boolean;
var
  hopen, hconnect: HINTERNET;
begin
  port := ftpport;
  hopen := InternetOpen('myagent', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
  hconnect := InternetConnect(hopen, pchar(server), port, pchar(username), pchar(password), INTERNET_SERVICE_FTP, ftpmodus, 0);
  Result := FtpGetFile(hconnect, pchar(localfile), pchar(remotefile), false, 0, FTP_TRANSFER_TYPE_UNKNOWN, 0);
  InternetCloseHandle(hconnect);
end;                             
 

Der Aufruf erfolgt folgendermaßen:

Code: Alles auswählen

 
   If getfile(ftpserver, ftpbenutzer, ftppasswort, 'httpdocs/test.txt', ExtractFilePath(Application.ExeName)+'test.txt') = true
    then
     begin
      [...]
     end;   
 

Das funktioniert soweit auch alles sehr gut.

Kennt ihr eine Möglichkeit, mit einer abgewandelten/ähnlich simpel aufgebauten Funktion, lediglich das Uploaddatum (nicht Erstelldatum) dieser Datei auf dem FTP-Server abzufragen, bevor diese Datei heruntergeladen wird? Ich benötige in meinem Programm das Dateidatum inkl. Uhrzeit mit Sekunden lediglich für diese eine Abfrage (alle 5 Minuten) dieser einen Datei.

Viele Grüße
Henning

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Dateidatum auf FTP-Server ermitteln

Beitrag von Socke »

Mit dem FTP-Befehl LIST kannst du diese Information beim Server anfordern (entweder für eine Datei oder für ein ganzes Verzeichnis). Du kannst es per FTPCommandA/FTPCommandW an den Server senden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

hebeyer
Beiträge: 2
Registriert: Di 4. Feb 2020, 18:58

Re: Dateidatum auf FTP-Server ermitteln

Beitrag von hebeyer »

Vielen Dank für den Tipp :)

Ich habe das jetzt folgendermaßen (fast) gelöst bekommen:

Code: Alles auswählen

 
uses
 FTPSend;
 


Code: Alles auswählen

 
procedure TForm1.ftpdatumzeit; //Checkt das Datum und die Uhrzeit einer auf dem FTP-Server vorhandenen Datei
var
aFTP: TFTPSend;
i: integer;
ftpdatum: String;
begin
    aFTP := TFTPSend.Create;
    aFTP.UserName := 'BENUTZERNAME';
    aFTP.Password := 'PASSWORT';
    aFTP.TargetHost := 'SERVERADRESSE';
    aFTP.TargetPort := '21';
    aFTP.PassiveMode :=true;
   If aFTP.Login then
   begin
    aftp.List('httpdocs/TEST.TXT',false) ;
    i := 0;
    while i < aftp.FtpList.Count do
      begin
        ftpdatum := DateTimeToStr(aftp.FtpList.Items[i].FileTime); //Hier wird das Datum und die Uhrzeit der Datei ausgegeben
        i:=i+1;
      end;
    aftp.Logout;
    aftp.Free;
   end;
end
 


Lediglich die Sekunden werden nicht korrekt angezeigt. Ich erhalte immer so etwas wie 17:43:00. Also die Sekunden werden immer mit "00" ausgegeben. :(
Aber schon mal besser als gar nichts. :)
Vielleicht hat von euch ja noch jemand einen Tipp bzgl. der Sekunden ...

Viele Grüße
Henning

Antworten