>lparameters tcFileName >*************************************** >* Declarations >*************************************** >DECLARE SHORT GetFileTime IN Win32API; > INTEGER hFile, STRING @lpftCreation,; > STRING @lpftLastAccess, STRING @lpftLastWrite > >DECLARE SHORT FileTimeToSystemTime IN Win32API; > STRING @lpft, STRING @lpst > >DECLARE SHORT FileTimeToLocalFileTime IN Win32API; > STRING @lpFileTime, STRING @lpLocalFileTime > >Declare INTEGER CreateFile IN Win32API; > STRING @lpFileName, INTEGER dwDesiredAccess,; > INTEGER dwShareMode, STRING @lpSecurityAttributes,; > INTEGER dwCreationDistribution, INTEGER dwFlagsAndAttributes,; > INTEGER hTemplateFile > >Declare SHORT CloseHandle IN Win32API; > INTEGER hObject > >#define GENERIC_READ 0x80000000 >#Define GENERIC_WRITE 0x40000000 >#define FILE_SHARE_READ 0x00000001 >#Define FILE_SHARE_WRITE 0x00000002 >#Define OPEN_EXISTING 0x00000003 >*************************************** >* Declarations >*************************************** > >Local lcFileName, ltCreateTime, ltLastAccessTime, ltModifiedTime >Local lnCreateMillis, lnLastAccessMillis, lnModifiedMillis > >_GetFileTime(tcFileName, ; > @ltCreateTime, @ltLastAccessTime, @ltModifiedTime, ; > @lnCreateMillis, @lnLastAccessMillis, @lnModifiedMillis) >? 'Created :', ltCreateTime, lnCreateMillis >? 'Last Access :', ltLastAccessTime, lnLastAccessMillis >? 'Modified :', ltModifiedTime, lnModifiedMillis > >Function _GetFileTime >Lparameters tcFile, ttCreated, ttLastAccess, ttModified, ; >tnCreatedMillis, tnLastAccessMillis, tnModifiedMillis >Local lcCreateTime, lcLastAccessTime, lcModifiedTime, lnMillis >lnhandle = CreateFile(@tcFile, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0) && Create handle >If lnhandle > 0 > Store REPLICATE(CHR(0), 16) to lcCreateTime, lcLastAccessTime, lcModifiedTime > lnresult = GetFileTime(lnhandle, @lcCreateTime, @lcLastAccessTime, @lcModifiedTime) > =CloseHandle(lnhandle) && Close the handle > if lnresult # 0 > ttCreated = _DecodeFileTime(lcCreateTime,@tnCreatedMillis) > ttLastAccess = _DecodeFileTime(lcLastAccessTime,@tnLastAccessMillis) > ttModified = _DecodeFileTime(lcModifiedTime,@tnModifiedMillis) > endif >else > Messagebox("Cannot create handle to file!") >endif > >function _DecodeFileTime >lparameters tcFileTime, tnMillis >local lcLocalTime, lcSysTime, lnResult, ltTime >ltTime = {/:} >Store REPLICATE(CHR(0), 16) to lcLocalTime, lcSysTime >if FileTimeToLocalFileTime(@tcfiletime, @lcLocalTime) # 0 and ; > FileTimeToSystemTime(@lcLocalTime, @lcSysTime) # 0 > ltTime = Datetime(Str2Val(substr(lcSysTime,1,2)), ; > Str2Val(substr(lcSysTime, 3,2)),; > Str2Val(substr(lcSysTime, 7,2)),; > Str2Val(substr(lcSysTime, 9,2)),; > Str2Val(substr(lcSysTime,11,2)),; > Str2Val(substr(lcSysTime,13,2)) ) > > tnMillis = Str2Val(substr(lcSysTime,15,2)) >endif >Return ltTime > >Function Str2Val >Lparameters tcStr >Local lnVal >lnVal = 0 >for ix=1 to len(tcStr) > lnVal = lnVal + asc(substr(tcStr,ix,1))*256^(ix-1) >endfor >return lnVal >>
>clear >myFileInfo("c:\my path\myFile*.*") && multiple skeletons are possible, can search subdirs etc > >FUNCTION myFileInfo >LPARAMETERS tcFileName >Local oFiler, ix >oFiler = Createobject('filer.fileutil') >With oFiler > .SearchPath = JUSTPATH(m.tcFileName) > .FileExpression = JUSTFNAME(m.tcFileName) && Search for skeleton with wildcards > For ix=1 To .Find(0) > With .Files(m.ix) > If !(Bittest(.Attr,4) And .Name = '.') > ? .Path, .Name, .Size, Attr2Char(.Attr), ; > Num2Time(.Datetime), Num2Time(.LastAccessTime), Num2Time(.LastWriteTime) > Endif > Endwith > Endfor >Endwith > >Function Num2Time >Lparameters tnFloat >Return Dtot({^1899/12/30}+Int(tnFloat))+86400*(tnFloat-Int(tnFloat)) > >Function Attr2Char >Lparameters tnAttr >Return ; > IIF(Bittest(tnAttr,0),'RO','RW')+; > IIF(Bittest(tnAttr,1),'H','_')+; > IIF(Bittest(tnAttr,2),'S','_')+; > IIF(Bittest(tnAttr,4),'D','_')+; > IIF(Bittest(tnAttr,5),'A','_')+; > IIF(Bittest(tnAttr,6),'E','_')+; > IIF(Bittest(tnAttr,7),'N','_') >>Filer.dll is also used by: