function getfiletime(sfilename: string
timetype: integer): tdatetime
var
ffd:TWin32FindData
dft:DWord
lft,Time:TFileTime
h:THandle
begin
h:=windows.FindFirstFile(pchar(sfilename),ffd)
if h<>INVALID_HANDLE_VALUE then begin
case timetype of
0: time:=ffd.ftCreationTime//创建时间
1: time:=ffd.ftLastAccessTime//最后访问时间
2: time:=ffd.ftLastWriteTime//修改时间
end
windows.FindClose(h)
filetimetolocalfiletime(time,lft)
filetimetodosdatetime(lft,longrec(dft).hi,longrec(dft).lo)
result:=filedatetodatetime(dft)
end
//获取文件大小
function GetFileSize(const AFile: string): Integer
var
hFile: THandle
begin
Result := 0
hFile := FileOpen(AFile, fmOpenRead)
if hFile <>INVALID_HANDLE_VALUE then
try
Result := FileSeek(hFile, 0, 2) div 1024
finally
FileClose(hFile)
end
end
所以
fname:='C:\111.txt'
SizeStr:=inttostr( GetFileSize(fname))
ftimeStr:=getfiletime(fname,2)
StatusBar.Panels[0].Text:='文件名为'+fname+' 大小'+sizeStr+' 修改时间为'+ftimeStr
(前提是在StatusBar按右键增加一个panel)
function TForm1.fgetfiletime(sfilename:stringtimetype:Integer):TDateTimevar
ffd:TWin32FindData// Win32的数据结构
{_WIN32_FIND_DATAA = record
dwFileAttributes: DWORD
ftCreationTime: TFileTime
ftLastAccessTime: TFileTime
ftLastWriteTime: TFileTime
nFileSizeHigh: DWORD
nFileSizeLow: DWORD
dwReserved0: DWORD
dwReserved1: DWORD
cFileName: array[0..MAX_PATH - 1] of AnsiChar
cAlternateFileName: array[0..13] of AnsiChar
end}
dft:DWORD
lft,time:TFileTime//文件的时间
{同 TDateTime 一样大小, 但结构原理完全不同:
TFileTime = record
dwLowDateTime: DWORD
dwHighDateTime: DWORD
end
TFileTime 记录的是从 1601-1-1 起的时间值, 以 100 纳秒(也就是万分之一毫秒)为单位
//DOS 时间就是一个 32 位(4字节)的整数(Integer), 好像没有专门的结构, 可用 LongRec 等代为解析.
DOS 时间的尺寸是 TFileTime、TDateTime 的 1/2, 是 TSystemTime 的 1/4因此不很精确.
它只能表示从 1980-2107 之间的时间, 且只能精确到 2 秒.
}
H:THandle//句柄
begin
{//返回一个搜索句柄。如果出错,返回一个INVALID_HANDLE_VALUE常数,一旦不再需要,应该用FindClose函数关闭这个句柄}
h:=Windows.FindFirstFile(PChar(sfilename),ffd)
case timetype of
0:time:=ffd.ftCreationTime//文件的创建时间
1:time:=ffd.ftLastWriteTime//上次写入时间
2:time:=ffd.ftLastAccessTime //上次访问时间
end
if (h<>invalid_handle_value)then //成功则进行下 *** 作
begin
Windows.FindClose(h)//关闭
//转换成本地时间
FileTimeToLocalFileTime(time,lft)
//将一个 win32 FILETIME 值转换成DOS日期和时间值
FileTimeToDosDateTime(lft,longrec(dft).hi,longrec(dft).lo)
{//当用FileAge获取文件整数时间表示后,要用FileDateToDateTime转化为本地时间}
Result:=FileDateToDateTime(dft)
end
else
Result:=0
end
日期比较和字符串比较有区别的。比较日期时,直接将字符串格式的日期转成TDateTime类型,然后当数字比较
比较日期的时候,用CompareValue
Result
:=
CompareValue(
StrToDateTime(txt1),
StrToDateTime(txt2)
)
if
not
m_bSort
then
Result
:=
-Result
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)