Einzelnen Beitrag anzeigen

Schokohase
(Gast)

n/a Beiträge
 
#12

AW: Dateidatum, Dateien vergleichen und Kopieren

  Alt 13. Feb 2019, 11:18
Das Verhalten liegt an NTFS (Festplatte) vs. FAT32 (USB-Stick).

Hier ein kleiner Test, wo man immer eine Differenz von 1-2 Sekunden sieht, obwohl die Werte exakt gleich sein müssten (siehe den unteren Teil, wo der Wert explizit bei beiden gleich gesetzt wird).
Delphi-Quellcode:
program FileAgeTest;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils,
  System.IOUtils;

procedure Main;
const
  NTFSVolume = 'E:\'; // muss ein NTFS-Laufwerk sein
  FAT32Volume = 'F:\'; // muss ein FAT32-Laufwerk sein
  FileName = 'TestFile.txt';
var
  LastWrite: TDateTime;
begin
  if TFile.Exists(TPath.Combine(NTFSVolume, FileName)) then
    TFile.Delete(TPath.Combine(NTFSVolume, FileName));
  if TFile.Exists(TPath.Combine(FAT32Volume, FileName)) then
    TFile.Delete(TPath.Combine(FAT32Volume, FileName));

  TFile.WriteAllText(TPath.Combine(NTFSVolume, FileName), 'test');
  Writeln(DateTimeToStr(TFile.GetLastWriteTime(TPath.Combine(NTFSVolume, FileName))));
  TFile.Copy(TPath.Combine(NTFSVolume, FileName),TPath.Combine(FAT32Volume, FileName));
  Writeln(DateTimeToStr(TFile.GetLastWriteTime(TPath.Combine(FAT32Volume, FileName))));

  LastWrite := System.SysUtils.Now;

  TFile.SetLastWriteTime(TPath.Combine(NTFSVolume, FileName),LastWrite);
  TFile.SetLastWriteTime(TPath.Combine(FAT32Volume, FileName),LastWrite);

  Writeln(DateTimeToStr(TFile.GetLastWriteTime(TPath.Combine(NTFSVolume, FileName))));
  Writeln(DateTimeToStr(TFile.GetLastWriteTime(TPath.Combine(FAT32Volume, FileName))));
end;

begin
  try
    Main;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;

end.
  Mit Zitat antworten Zitat