![]() |
Änderungsdatum prüfen
Hallo zusammen,
folgendes: Auf einem FTP Server werden nach 3-4 Monaten eine Aktualisierung einer bestimmten Datei hochgeladen. Die erste Datei liegt bereits lokal auf meinem Rechner. Ich möchte nun prüfen, ob die Datei des Servers aktueller ist als die auf dem lokalem Rechner, z.B. über das Änderungsdatum. Ist die Datei aktueller, soll sie heruntergeladen werden, entpackt und der Inhalt in eine Datenbank eingespielt werden. Lässt sich das Änderungsdatum auch direkt auf dem FTP Server prüfen?? Oder hättet ihr eine ganz andere Lösungsmöglichkeit für mich? So würde ich es lösen:
Delphi-Quellcode:
procedure TfrmdatenDownload.Button1Click(Sender: TObject);
var DOSDatum : integer; WinDatum : TDateTime; Dateiname : string; begin TRY TRY ftpDateiDownload.Username := 'admin'; ftpDateiDownload.Password := 'passwort'; ftpDateiDownload.Host := 'FTP SERVER'; ftpDateiDownload.Connect; Application.ProcessMessages; if SaveDlgBankdatendownload.Execute then begin ftpDateiDownload.Get('Datei.txt', 'G:\Projekte', false); {wie entpacken} {sobald Datei entpackt, über DOSDatum:=FileAge(Dateiname); WinDatum:=FileDateToDateTime(DOSDatum); anhand des Änderungsdatums prüfen, ob Datei aktueller ist, wenn ja DB UPDATE} end; EXCEPT MessageDlg('Es ist ein Fehler beim Download aufgetreten, Prozess wird beendet', mtError, [mbOK], 0); END; FINALLY ftpDateiDownload.Quit; END; end; |
AW: Änderungsdatum prüfen
Im Prinzip ja ... nur du kannst ja das Dateidatum schon vor dem Download prüfen lassen ;)
Ein (vernünftiger) FTP-Server gibt dir auch das Datei-Datum zurück. Somit würde ich auf Anfrage dieses prüfen, Die Datei dann in den Temp-Ordner laden und von dort importieren. Dadurch entlastest du auch den Anwender bzgl. Zeit und Auswahl, wohin die Datei denn soll :) |
AW: Änderungsdatum prüfen
Zitat:
Zitat:
|
AW: Änderungsdatum prüfen
Zitat:
Schau dir also mal die FTP-Befehle an |
AW: Änderungsdatum prüfen
Delphi-Quellcode:
das scheint gut auszusehen, oder meintest du eine andere? ;)
function FileDate(
const AFileName: String, const AsGMT: Boolean = False ): TIdDateTime; wenn ich jetzte noch die Zugangsdaten zum FTP Server hätte, könnte ich vll auch mal sinnvoll testen, so bleibt mir wohl nichts anderes übrig als code zu tippen und hoffen, er funktiert :) |
AW: Änderungsdatum prüfen
soo, hab mal was gecoded, kann aber nicht sagen, ob das so funktioniert:
Delphi-Quellcode:
Anregungen?
procedure TfrmBankenDownload.Button1Click(Sender: TObject);
var iDOSDatumLokal: Integer; dtWINDatumLokal : TDateTime; sDateiEndung: String; begin TRY TRY ftpDateiDownload.Username := 'admin'; ftpDateiDownload.Password := 'passwort'; ftpDateiDownload.Host := 'FTP SERVER'; ftpDateiDownload.Connect; {Änderungsdatum der lokalen Datei herausfinden} iDOSDatumLokal := FileAge('C:\Importdateien\Datei.txt'); dtWINDatumLokal := FileDateToDateTime(iDOSDatumLokal); {Abfrage, ob Datei auf Server aktueller als Datei Lokal} if ftpDateiDownload.FileDate('Datei.zip',false) > dtWINDatumLokal then if dlgDateiAbspeichern.Execute then begin {Datei downloaden und entpacken} ftpDateiDownload.Get('Datei.zip', dlgDateiAbspeichern.FileName, false); AbZIPEntpacken.FileName := 'C:\Importdateien\Datei_Neu.txt'; AbZIPEntpacken.BaseDirectory := 'C:\Importdateien\'; AbZIPEntpacken.ExtractFiles('*.*'); {Tabelle leeren und neue Werte eintrage} qTabelleLeeren.SQL.Text := 'DELETE FROM Tabelle'; qTabelleLeeren.ExecSQL; {Werte aus Datei (csv oder txt) in Datenbank schreiben} if dlgDateiEinelsen.Execute then sDateiendung := ExtractFileExt(ansilowercase(dlgDateiEinelsen.FileName)); if sDateiendung = '.txt' then importFromTextfile(dlgDateiEinelsen.FileName) else importFromCSVfile(dlgDateiEinelsen.FileName); end; EXCEPT MessageDlg('Es ist ein Fehler beim Download aufgetreten, Prozess wird beendet', mtError, [mbOK], 0); END; FINALLY ftpDateiDownload.Quit; qTabelleLeeren.Close; END; end; Fehler gefunden? |
AW: Änderungsdatum prüfen
Du solltest dir das Datum der Datei merken (in einer ini-Datei?) die du herunterlädst.
Die entpackte Datei hat definitiv ein anderes Datum ;) und könnte evtl. auch durch Zugriffe geändert werden Dieses Datum nimmst du dann zum Vergleich |
AW: Änderungsdatum prüfen
Zitat:
Was mir aber noch auffällt, es besteht die Möglichkeit, dass ich bereits zwei Dateien lokal auf dem Rechner haben (eine CSV-Datei und eine Textdatei) kann. Also müssste ich noch irgendwie abprüfen, ob die Datei auf dem Server > .txt Datei > CSV-Datei ist, hmn ... Vorher müsste ich dann aber noch prüfen, ob auch beide Dateien im ORdner beinhaltet sind, oder nur eine, oder vll garkeine. hmn hmn .. |
AW: Änderungsdatum prüfen
Die ermittelst das Datum der lokalen Datei "Datei.txt"
und vergleichst das Datum mit der remote Datei "Datei.zip" Diese wird entpackt und zum Vorschein kommt "Datei_Neu.txt" Ich würde immer nur das Datum von "Datei.zip" vergleichen und abspeichern, wenn ich die herunterladen. Aber jeder auf seine Art ;) |
AW: Änderungsdatum prüfen
hmn, also meine Methode scheint mir auch richig zu sein *grins* :)
Zitat:
Aber leider kann ich noch nicht prüfen, ob mein Code soweit funktioniert und ob man das Datum der 2 Dateien über ein ">" prüfen kann. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:42 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