我已经实现了,具体问题是当我编程显示文件修改日期时只有文件能正确显示日期,而文件夹的
修改日期都是1899-12-30,我不知道问题在哪。
function Tmain.GetFileTimes(FileName : ShortString; typ : byte; var fDate : TDateTime) : Boolean;
var
fHandle : Integer;
fTimeC,
fTimeA,
fTimeM :TFileTime;
lTime : TFileTime;
sTime : TSystemTime;
begin
fHandle := FileOpen(FileName, fmShareDenyNone);
fDate := 0.0;
result := (fHandle >= 0);
if result
then begin GetFileTime(fHandle, @fTimeC, @fTimeA, @fTimeM);
FileClose(fHandle);
case typ of
FD_CREATED : FileTimeToLocalFileTime(fTimeC, lTime);
FD_ACCESSED : FileTimeToLocalFileTime(fTimeA, lTime);
FD_MODIFIED : FileTimeToLocalFileTime(fTimeM, lTime);
end;
if FileTimeToSystemTime(lTime, sTime)
then fDate := EncodeDate(sTime.wYear, sTime.wMonth, sTime.wDay) + EncodeTime(sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliSeconds);
end;
end; { of GetFileTimes }
procedure tmain.GetDirList(dir : ShortString; List : TListview; recursive : Boolean);
var
fsRec : TSearchRec;
fIPtr : FileInfoPtr;
listitem:Tlistitem;
s:Tdatetime;
begin { GetDirList }
if (dir = '')
then Exit;
if (dir[length(dir)] <> '')
then dir := dir + '';
try
if (FindFirst(dir + '*', faAnyFile, fsRec) = 0)
then repeat if (fsRec.Name <> '') AND (fsRec.Name <> '.') AND (fsRec.Name <> '..')
then begin fIPtr := AllocMem(SizeOf(FileInfoRec));
fIPtr^.fName :=fsRec.Name;
GetFileTimes(dir + fsRec.Name, FD_MODIFIED, fIPtr^.Modified);
if ((fsRec.Attr AND faDirectory) = faDirectory)
then begin fIPtr^.typ := FL_FOLDER;
listitem:=listview1.Items.Add;
listitem.Caption:=fiptr.fName;
listitem.SubItems.Add(inttostr(fsrec.Size));
listitem.SubItems.Add('');
listitem.SubItems.add(datetostr(fiptr.Modified));
s:=fiptr.Modified;
if recursive
then GetDirList(dir + fsRec.Name, List, TRUE);
end
else begin fIPtr^.typ := FL_FILE;
listitem:=listview1.Items.Add;
listitem.Caption:=fiptr.fName;
listitem.SubItems.Add(inttostr(fsrec.Size));
listitem.SubItems.Add('');
listitem.SubItems.add(datetostr(fiptr.Modified));