program gda; /// (g)et (d)irectory (a)ge ///
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}
cthreads, baseunix,
{$ENDIF}
Classes,sysutils;
function DirAge(const FileName : rawbytestring; out aStat: stat): ptrint;
var
Info : baseunix.stat;
SystemFileName: RawByteString;
begin
SystemFileName:= ToSingleByteFileSystemEncodedFileName(FileName);
if fpstat(PAnsiChar(SystemFileName),Info) < 0 then
exit(-1)
else
Result:= Info.st_mtime; /// we're mostly interested in 'modified'
aStat:= Info; /// record copy, but can't use pointer, 'cause info is local and goes outta scope
end;
var
da: ptrint;
dn: string;
st: baseunix.stat;
begin
writeln('>> (g)et (d)irectory (a)ge <<');
writeln('(i) usage: gda <directory-name>');
if ParamCount < 1 then halt(1);
dn:= ParamStr(1);
da:= DirAge(dn,st);
writeln('>- - - -[ Info about "',dn,'" ]- - - -<');
writeln('(i) Dir-Mod: ',da,', as DateTime: ',DateTimeToStr(FileDateToDateTime(da)));
writeln('(i) Dir-Cre: ',st.st_ctime,', as DateTime: ',DateTimeToStr(FileDateToDateTime(st.st_ctime)));
writeln('(i) Dir-Acc: ',st.st_atime,', as DateTime: ',DateTimeToStr(FileDateToDateTime(st.st_atime)));
writeln('________________________________________');
end.