...get/set the Date of a folder?

Author: Rainer K├╝mmerle
Homepage: http://www.thinklazy.de

Category: Files

function GetFolderDate(Folder: string): TDateTime;
var
  
Rec: TSearchRec;
  Found: Integer;
  Date: TDateTime;
begin
  if 
Folder[Length(folder)] = '\' then
    
Delete(Folder, Length(folder), 1);
  Result := 0;
  Found  := FindFirst(Folder, faDirectory, Rec);
  try
    if 
Found = 0 then
    begin
      
Date   := FileDateToDateTime(Rec.Time);
      Result := Date;
    end;
  finally
    
FindClose(Rec);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  
d: TDateTime;
begin
  
d := GetFolderDate('C:\WINNT');
  ShowMessage(FormatDateTime('dddd, d. mmmm yyyy, hh:mm:ss', d));
end;


{ Sets the time for both files and directories }
{ for NT }

function NT_SetDateTime(FileName: string; dtCreation, dtLastAccessTime, dtLastWriteTime: TDateTime): Boolean;
// by Nicholas Robinson
var
  
hDir: THandle;
  ftCreation: TFiletime;
  ftLastAccessTime: TFiletime;
  ftLastWriteTime: TFiletime;

  function DTtoFT(dt: TDateTime): TFiletime;
  var
    
dwft: DWORD;
    ft: TFiletime;
  begin
    
dwft := DateTimeToFileDate(dt);
    DosDateTimeToFileTime(LongRec(dwft).Hi, LongRec(dwft).Lo, ft);
    LocalFileTimeToFileTime(ft, Result);
  end;

begin
  
hDir := CreateFile(PChar(FileName),
                     GENERIC_READ or GENERIC_WRITE,
                     0,
                     nil,
                     OPEN_EXISTING,
                     FILE_FLAG_BACKUP_SEMANTICS,
                     0);
  if hDir <> INVALID_HANDLE_VALUE then 
  begin
    try
      
ftCreation       := DTtoFT(dtCreation);
      ftLastAccessTime := DTtoFT(dtLastAccessTime);
      ftLastWriteTime  := DTtoFT(dtLastWriteTime);
      Result := SetFileTime(hDir, @ftCreation, @ftLastAccessTime, @ftLastWriteTime);
    finally
      
CloseHandle(hDir);
    end;
  end
  else
    
Result := False;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  
NT_SetDateTime('c:\temp\MyFolder', now, now, now);
end;

 

printed from
www.swissdelphicenter.ch
developers knowledge base