Search code examples
delphidelphi-xe2

DateTimeToFileDate doesn't work


I have this code:

program Project1;

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

uses
  System.SysUtils, System.DateUtils, System.IOUtils;

var
  fFileName: TFilename;
  dtFileCreationTime, dtFileLastAccessTime, dtFileLastWriteTime: TTimeStamp;

begin
  try
    { TODO -oUser -cConsole Main : Insert code here }

    fFileName := 'myfilename.ext'; // here i insert correct path
    dtFileCreationTime := DateTimeToTimeStamp(EncodeDateTime(1981, 10, 5, 20,
      35, 40, 10));
    dtFileLastAccessTime := DateTimeToTimeStamp(EncodeDateTime(1982, 11, 6, 21,
      36, 41, 11));
    dtFileLastWriteTime := DateTimeToTimeStamp(EncodeDateTime(1983, 12, 7, 22,
      37, 42, 12));

    TFIle.SetCreationTime(fFileName,
      DateTimeToFileDate(TimeStampToDateTime(dtFileCreationTime)));
    TFIle.SetLastAccessTime(fFileName,
      DateTimeToFileDate(TimeStampToDateTime(dtFileLastAccessTime)));
    TFIle.SetLastWriteTime(fFileName,
      DateTimeToFileDate(TimeStampToDateTime(dtFileLastWriteTime)));

    Writeln('FileCreationTime   => ',
      DateTimeToStr(TFIle.GetCreationTime(fFileName)));
    Writeln('FileLastAccessTime => ',
      DateTimeToStr(TFIle.GetLastAccessTime(fFileName)));
    Writeln('FileLastWriteTime  => ',
      DateTimeToStr(TFIle.GetLastWriteTime(fFileName)));

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

end.

Simply I want to set date of a file, but it doesn't work, Where do I make a mistake? Thanks for help.


Solution

  • The methods you call on TFile expect a TDateTime. So remove the DateTimeToFileDate calls.

    TFIle.SetCreationTime(fFileName, TimeStampToDateTime(dtFileCreationTime));
    

    Of course, you can remove the time stamp indirection.

    TFIle.SetCreationTime(fFileName, EncodeDateTime(1981, 10, 5, 20, 35, 40, 10));