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 lnVal2) Filer.dll
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: