谁有类似win资源管理器的源码?急,在线等!(5分)

  • 主题发起人 主题发起人 沈浪
  • 开始时间 开始时间

沈浪

Unregistered / Unconfirmed
GUEST, unregistred user!
如提。分不够可以在加
 
用D6,有现成的ShellSystemView和ShellTreeView
 
我已经实现了,具体问题是当我编程显示文件修改日期时只有文件能正确显示日期,而文件夹的
修改日期都是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));
 
GetFileTimes函数是只能得到文件日期的,要得到目录日期,可以这样:

procedure TForm1.Button1Click(Sender: TObject);
var
data:WIN32_FILE_ATTRIBUTE_DATA;
systime:SYSTEMTIME;
local:FILETIME;
begin

if(not GetFileAttributesEx('c:/books',GetFileExInfoStandard,@data))then
RaiseLastWin32Error();

FileTimeToLocalFileTime(data.ftCreationTime,local); //要转换为本地时间,否则为标准时间
FileTimeToSystemTime(local,systime);

with systime do
ShowMessage(Format('%d-%d-%d %d:%d:%d',[wYear,wMonth,wDay,wHour,wMinute,wSecond]));

end;
 
后退
顶部