我写了如下代码,编译通过,但是等到的文件的创建时间不对,因为我知道检索到的文件是几天前创建的,但subdt的值却等于1899-12-30。这应该是系统时间与文件创建时间差值为0时的结果啊
String dt;
dt = Date();
TDateTime sysdt = TDateTime (dt);
int hWndFile = FileOpen( sr.Name, fmOpenRead );
if ( -1 != hWndFile )
{
TDateTime filt = FileDateToDateTime(FileGetDate(hWndFile));
TDateTime subdt = sysdt - filt;
RichEdit2->Lines->Add(DateToStr(subdt));
}
文件有三个时间,创建时间,最后访问时间,最后写入时间,不知道fileGetDate返回的那个时间,你自己试一下吧,不行的话,我看还是用api函数吧
FileGetDate返回的是文件修改时间(最后写入),不是创建时间.
这个函数实际上调用了API函数GetFileTime,但忽略了创建时间和访问时间.
API原型为:
BOOL GetFileTime(
HANDLE hFile, // handle to the file
LPFILETIME lpCreationTime, // address of creation time
LPFILETIME lpLastAccessTime, // address of last access time
LPFILETIME lpLastWriteTime // address of last write time
);
VCL中FileGetDate源码是这样的:
function FileGetDate(Handle: Integer): Integer;
var
FileTime, LocalFileTime: TFileTime;
begin
if GetFileTime(THandle(Handle), nil, nil, @FileTime) and
FileTimeToLocalFileTime(FileTime, LocalFileTime) and
FileTimeToDosDateTime(LocalFileTime, LongRec(Result).Hi,
LongRec(Result).Lo) then Exit;
Result := -1;
end;
你可以发现GetFileTime的第2,3参数都是nil(NULL),只用了写入时间.
有了这段源码我想你可以自己用GetFileTime来完成你的任务了:)