delphi 状态栏 显示文件大小,修改时间,名称

delphi 状态栏 显示文件大小,修改时间,名称,第1张

//获取文件时间

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):TDateTime

var

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7951969.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存