Je cache des fichiers localement dans mon application à 3 niveaux. Pour vérifier si lire le fichier du cache local ou du serveur je compare des dates de dossier. J'ai trouvé que lors de la conversion des dates de fichier en TDateTime et viceversa il y a des incohérences et des valeurs qui devraient correspondre rarement. Voici un code qui illustre le problèmeComment corriger les incohérences lors de la conversion de dates de fichier vers/depuis TDateTime
procedure TestFileDateConversion;
const
Dir = 'c:\TestDir\';
Filename = 'test.txt';
var
FileDate, NewFileDate: TDateTime;
FilePath: String;
FileHandle: THandle;
begin
ForceDirectories(Dir);
FilePath := concat(Dir, Filename);
// Create the file if it doesn't already exist
FileCreate(FilePath);
FileDate := now;
// Set the file date
try
FileHandle := FileOpen(FileName, fmOpenWrite OR fmShareDenyNone);
if FileHandle > 0 Then
FileSetDate(FileHandle, DateTimeToFileDate(FileDate));
finally
FileClose(FileHandle);
end;
// Check that the expected file date and the actual file date match
if (FileAge(FilePath, NewFileDate)) and (FileDate <> NewFileDate) then
ShowMessage('File dates do not match'); // More often than not, they don't
end;
Je suis sûr que cela est dû à un problème d'arrondi. Est-ce que quelqu'un sait un moyen de le réparer?
N'utilisez pas 'TDateTime', utilisez' FILETIME' à la place. Il existe même une fonction 'CompareFileTime()' dans l'API Windows. – mghie