Entwickler-Ecke
Dateizugriff - FTP-Server Dateien mit Lokalen Dateien synchronisieren
Sahroma - Mi 16.03.16 15:13
Titel: FTP-Server Dateien mit Lokalen Dateien synchronisieren
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.)
Delphi-Quelltext
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
Sahroma - Mi 16.03.16 16:02
DANKE baumina!
Top :flehan:
Genau nach so etwas habe ich gesucht (habe ich wohl beim durchgehen der Indy-Hilfe übersehen :oops: )
Gerd Kayser - Mi 16.03.16 16: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.
Sahroma - Do 24.03.16 11:49
Habe jetzt ein kleines Problem. Er gibt mir nun als Datum (Variable "Date") den 18.12.1899 an. :shock:
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 - Do 24.03.16 12: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 - Do 24.03.16 13: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! :gruebel:
Gerd Kayser - Do 24.03.16 19: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.
Sahroma - Di 19.04.16 10:10
Habe jetzt IdAllFTPListParsers unter Use eingefügt aber als Ergebnis bekomme ich immer noch 30.12.1899. Ich komme nicht dahinter. :gruebel:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!