Autor |
Beitrag |
Sahroma
Beiträge: 66
Erhaltene Danke: 1
Delphi 10 Seattle, Delphi 10.1 Berlin
|
Verfasst: Mi 16.03.16 16:13
Hallo zusammen,
ich habe einen FTP Uploader geschrieben der bestimmte Dateien die in einem Ordner sind auf einen FTP Server lädt. Funktioniert auch alles ohne Probleme, nur mein Problem nun ist die Lokalen Dateien anhand des Änderungsdatum mit denen auf dem FTP Server vergleichen und nur die wo aktualisiert worden sind uploaden. Wie bekomme ich das am besten hin? Mir fällt nichts ein wie ich das am besten lösen kann. Hier mal mein Code (kleine Anmerkung: das Programm prüft ob es die Datei bereits auf dem Server gibt, wenn ja lädt er sie nicht nochmal hoch.)
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44:
| procedure TFTP_Uploader.FTPUpload(const FTPDir, LocaleDir: string; Button: TBitBtn); var ZeileNr, I, IndexOfsrcList: Integer; FTPList: TStringList; begin srcList := TStringList.Create; FTPList := TStringList.Create; try try idFTP1.Host := Host; idFTP1.Username := Username; idFTP1.Password := Password; idFTP1.Connect; idFTP1.ChangeDir(FTPDir); idFTP1.List(FTPList, '', false); FindFiles(LocaleDir, '*', lbSource.Items, False); srcList.Assign(lbSource.Items);
try for I := 0 to Pred(FTPList.Count) do begin IndexOfsrcList := srcList.IndexOf(FTPList[I]); if IndexOfsrcList <> -1 then srcList.Delete(IndexOfsrcList); end; except on E: Exception do Application.MessageBox(PChar(E.Message), 'Dateifehler', MB_OK); end;
for ZeileNr := 0 to srcList.Count - 1 do idFTP1.Put(LocaleDir + '\' + srcList[ZeileNr]);
idFTP1.Disconnect;
Button.Font.Color := clgreen; except on E: Exception do Application.MessageBox(PChar(E.Message), 'Verbindungsfehler!', MB_OK); end; finally srcList.Free; FTPList.Free; end; end; |
Hat jemand eine Idee wie ich das am besten hinbekomme?
Danke schonmal für eure Hilfe
Sahroma
|
|
baumina
Beiträge: 305
Erhaltene Danke: 61
Win 7
Delphi 10.2 Tokyo Enterprise
|
Verfasst: Mi 16.03.16 16:30
Du kannst im ModifiedDate nachschauen.
Beispiel: TIdFTP.DirectoryListing[Index].ModifiedDate
Für diesen Beitrag haben gedankt: Sahroma
|
|
Sahroma
Beiträge: 66
Erhaltene Danke: 1
Delphi 10 Seattle, Delphi 10.1 Berlin
|
Verfasst: Mi 16.03.16 17:02
DANKE baumina!
Top
Genau nach so etwas habe ich gesucht (habe ich wohl beim durchgehen der Indy-Hilfe übersehen )
|
|
Gerd Kayser
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Mi 16.03.16 17:21
baumina hat folgendes geschrieben : | Du kannst im ModifiedDate nachschauen. |
Wenn eine Datei geändert wird, dann wird von Windows das Archiv-Flag bei den Dateiattributen gesetzt. Man muss also nur die Dateien mit gesetztem Archiv-Flag uploaden. Danach bei den Dateien das Attribut wieder löschen.
|
|
baumina
Beiträge: 305
Erhaltene Danke: 61
Win 7
Delphi 10.2 Tokyo Enterprise
|
Verfasst: Mi 16.03.16 17:25
|
|
Sahroma
Beiträge: 66
Erhaltene Danke: 1
Delphi 10 Seattle, Delphi 10.1 Berlin
|
Verfasst: Do 24.03.16 12:49
Habe jetzt ein kleines Problem. Er gibt mir nun als Datum (Variable "Date") den 18.12.1899 an.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| for M := 0 to IdFTP1.DirectoryListing.Count - 1 do begin Date := IdFTP1.DirectoryListing[M].ModifiedDate; if Date < now then begin lbSource.Items.Add(idFTP1.DirectoryListing[M].FileName); for ZeileNr := 0 to srcList.Count - 1 do idFTP1.Put(LocaleDir + '\' + srcList[ZeileNr]); end; end; |
Was stimmt da nicht? Ich komme nicht dahinter
|
|
jaenicke
Beiträge: 19276
Erhaltene Danke: 1741
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 24.03.16 13:37
Dann ist das Datum, das der FTP Server zurückgeliefert hat, Null. Denn die Zahl Null entspricht genau diesem Datum.
Gab es da nicht zwei Möglichkeiten das Listing abzurufen? Vielleicht fehlen dort die Details.
Werden diese Informationen denn in einen FTP Client wie FileZilla angezeigt?
|
|
Sahroma
Beiträge: 66
Erhaltene Danke: 1
Delphi 10 Seattle, Delphi 10.1 Berlin
|
Verfasst: Do 24.03.16 14:38
Also bei FileZilla wird das Datum korrekt angezeigt. Das mit den Möglichkeiten mit Listing muss ich mal noch genauer schauen. Habe bisher nichts gefunden!
|
|
Gerd Kayser
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Do 24.03.16 20:15
jaenicke hat folgendes geschrieben : | Denn die Zahl Null entspricht genau diesem Datum. |
0 entspricht dem 30.12.1899. Der 18.12.1899 somit -12. Vielleicht liegt das Problem an einem fehlenden oder falschen Parser.
|
|
jaenicke
Beiträge: 19276
Erhaltene Danke: 1741
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 24.03.16 21:31
Ah, ich erinnere mich, man muss den Parser angeben... Mehr dazu steht vielleicht hier:
www.delphipraxis.net...irectorylisting.html
Ich bin unterwegs, kann auf dem Handy jetzt nicht genauer schauen...
|
|
Sahroma
Beiträge: 66
Erhaltene Danke: 1
Delphi 10 Seattle, Delphi 10.1 Berlin
|
Verfasst: Di 19.04.16 11:10
Habe jetzt IdAllFTPListParsers unter Use eingefügt aber als Ergebnis bekomme ich immer noch 30.12.1899. Ich komme nicht dahinter.
|
|