Clear oFileTimes = _GetFileTime(_samples+'data\employee.dbf') If !oFileTimes.Error ? 'Create:', oFileTimes.createTime, oFileTimes.createMilli ? 'LastAccess:',oFileTimes.lastAccessTime,oFileTimes.lastAccessMilli ? 'Modified:', oFileTimes.modifiedTime, oFileTimes.modifiedMilli Else ? 'Error' Endif Function _GetFileTime Lparameters tcFile *************************************** * 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 lcCreateTime, lcLastAccessTime, lcModifiedTime, lnMillis Local oFileTimes oFileTimes = CreateFileTimesReturnObject() lnhandle = CreateFile(@tcFile, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0) && Create handle If m.lnhandle > 0 Store Replicate(Chr(0), 16) To m.lcCreateTime, m.lcLastAccessTime, m.lcModifiedTime oFileTimes.Error = (GetFileTime(m.lnhandle, ; @lcCreateTime, @lcLastAccessTime, @lcModifiedTime) = 0) =CloseHandle(m.lnhandle) && Close the handle If !oFileTimes.Error oFileTimes.createTime = _DecodeFileTime(m.lcCreateTime,@lnMillis) oFileTimes.createMilli = m.lnMillis oFileTimes.lastAccessTime = _DecodeFileTime(m.lcLastAccessTime,@lnMillis) oFileTimes.lastAccessMilli = m.lnMillis oFileTimes.modifiedTime = _DecodeFileTime(m.lcModifiedTime,@lnMillis) oFileTimes.modifiedMilli = m.lnMillis Endif Else oFileTimes.Error = .T. Endif Return oFileTimes Endfunc Function _DecodeFileTime Lparameters tcFileTime, tnMillis Local lcLocalTime, lcSysTime, lnresult, ltTime ltTime = {/:} Store Replicate(Chr(0), 16) To m.lcLocalTime, m.lcSysTime If FileTimeToLocalFileTime(@tcFileTime, @lcLocalTime) # 0 And ; FileTimeToSystemTime(@lcLocalTime, @lcSysTime) # 0 ltTime = Datetime(Str2Val(Substr(m.lcSysTime,1,2)), ; Str2Val(Substr(m.lcSysTime, 3,2)),; Str2Val(Substr(m.lcSysTime, 7,2)),; Str2Val(Substr(m.lcSysTime, 9,2)),; Str2Val(Substr(m.lcSysTime,11,2)),; Str2Val(Substr(m.lcSysTime,13,2)) ) tnMillis = Str2Val(Substr(m.lcSysTime,15,2)) Endif Return m.ltTime Endfunc Function Str2Val Lparameters tcStr Local lnVal lnVal = 0 For ix=1 To Len(m.tcStr) lnVal = m.lnVal + Asc(Substr(m.tcStr,m.ix,1))*256^(m.ix-1) Endfor Return m.lnVal Endfunc Function CreateFileTimesReturnObject Local oReturn, lnSelect If Type('VERSION(5)') = 'N' And Version(5) >= 900 oReturn = Createobject('empty') AddProperty(oReturn, 'error', .F.) AddProperty(oReturn, 'createTime') AddProperty(oReturn, 'createMilli') AddProperty(oReturn, 'lastAccessTime') AddProperty(oReturn, 'lastAccessMilli') AddProperty(oReturn, 'modifiedTime') AddProperty(oReturn, 'modifiedMilli') Else lnSelect = Select() Create Cursor tmp (Error L,; createTime L, createMilli L, ; lastAccessTime L, lastAccessMilli L, ; modifiedTime L, modifiedMilli L ) Scatter Name oReturn Blank Use In 'tmp' Select (m.lnSelect) Endif Return oReturn EndfuncCetin