Hallo,
also ich arbeite schon seit einiger Zeit an einem Programm, welches einen Ordner mit Unterordnern auf einem Server mit einem auf den jeweiligen PCs vergleichen soll.
Das Rätsel was sich mir dabei auftut ist folgendes:
Und zwar stehe ich vor dem Problem, wie ich verfahren soll, wenn eine Datei sowohl auf dem Server als auch auf dem PC vorliegt.
Irgendwie müsste ich die Versionen abgleichen. Ich dachte mir zunächst, das ginge am einfachsten über das Datum der letzten Änderung. Das wird auf dem Server in einer Ini-Datei festgehalten, in der das Datum und die Uhrzeit des Hochladens steht.
Dies soll nun mit einem Datum auf dem PC verglichen werden!
Jetzt ist die Frage, wie kann ich das ermitteln?
Mit dieser Funktion bekomme ich leider nur das Datum des letzten Zugriffs. Das bringt mir gar nichts, da sich das laufend ändert!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| unction GetFileLastAccessTime(Path: string): TDateTime; var hFile: THandle; rStructur: TWin32FindData; rFileTime: TFileTime; dwLastAccess: cardinal;
begin Result := 0; hFile := Windows.FindFirstFile(pchar(Path), rStructur); if INVALID_HANDLE_VALUE <> hFile then begin Windows.FindClose(hFile); FileTimeToLocalFileTime(rStructur.ftLastAccessTime, rFileTime); FileTimeToDosDateTime(rFileTime, LongRec(dwLastAccess).Hi, LongRec(dwLastAccess).Lo); Result := FileDateToDateTime(dwLastAccess); end;
end; |
Auch das Datei-Erstellungsdatum auszulesen würde nichts bringen, da sich das zum einen auf dem Server laufend ändert und zum anderen nach dem Bearbeiten der Datei auf dem PC nicht geändert wird.
Dazu würde diese Funktion dienen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| function GetCreationTimeOfFile(const AFileName: String;): TDateTime; var SR: TSearchRec; SystemTime: TSystemTime; NewCreationTime: TFileTime; begin Result:=0; if FindFirst(AFileName, faAnyFile, SR)=0 then try IF (Windows.FileTimeToLocalFiletime(SR.FindData.ftCreationTime, NewCreationTime) and Windows.FileTimeToSystemTime(NewCreationTime, SystemTime)) Then Result:=Encodedate(SystemTime.wYear, SystemTime.wMonth, SystemTime.wDay) + Encodetime(SystemTime.wHour, SystemTime.wMinute, SystemTime.wSecond, SystemTime.wMilliseconds); finally SysUtils.FindClose(SR) end; end; |
Ich brauche also eine Funktion, die mir das Datum der letzten Änderung ausgibt!
Habe nur leider keine Idee wie!