发信人: goodfrd(Supervisor) 
整理人: hunter__fox(2003-05-30 22:23:20), 站内信件
 | 
 
 
* WINFTIME.PRG --- WINDOWS 文件“创建、存取、修改时间”获取和设置/修改函数
 *   M.L.Y  2002.11.25
 * Tested on VFP 5
 *======================================================================
 *============================================================
 PROCEDURE DECL_DLL_FUNC
 
 PUBLIC gnError
 
 DECLARE INTEGER GetLastError IN KERNEL32.DLL
 
 DECLARE INTEGER FormatMessage IN WIN32API ;
     INTEGER dwFlags, ;
     INTEGER lpvSource, ;
     INTEGER dwMsgId, ;
     INTEGER dwLangId, ;
     STRING  @lpBuffer, ;
     INTEGER nSize, ;
     INTEGER Arguments
 
 DECLARE INTEGER CreateFile IN KERNEL32.DLL ;
     STRING lpFileName, ;
     INTEGER dwDesiredAccess, ;
     INTEGER dwShareMode, ;
     INTEGER lpSecurityAttributes, ;
     INTEGER dwCreationDistribution, ;
     INTEGER dwFlagsAndAttributes, ;
     INTEGER hTemplateFile
 
 DECLARE INTEGER CloseHandle IN KERNEL32.DLL ;
     INTEGER hObject
 
 DECLARE INTEGER GetFileTime IN KERNEL32.DLL ;
     INTEGER hFile, ;
     STRING @ lpCreationTime, ;
     STRING @ lpLastAccessTime, ;
     STRING @ lpLastWriteTime
 
 DECLARE INTEGER SetFileTime IN KERNEL32.DLL ;
     INTEGER hFile, ;
     STRING  lpftCreation, ;
     STRING  lpftLastAccess, ;
     STRING  lpftLastWrite
 
 DECLARE INTEGER FileTimeToLocalFileTime IN KERNEL32.DLL ;
     STRING lpFileTime, ;
     STRING @ lpLocalFileTime
 
 DECLARE INTEGER LocalFileTimeToFileTime IN KERNEL32.DLL ;
     STRING lpLocalFileTime, ;
     STRING @ lpFileTime
 
 DECLARE INTEGER FileTimeToSystemTime IN KERNEL32.DLL ;
     STRING lpFileTime, ;
     STRING @ lpSystemTime
 
 DECLARE INTEGER SystemTimeToFileTime IN KERNEL32.DLL ;
     STRING lpSystemTime, ;
     STRING @ lpFileTime
 
 #define GENERIC_READ                     0x80000000
 #define GENERIC_WRITE                    0x40000000
 #define GENERIC_EXECUTE                  0x20000000
 #define GENERIC_ALL                      0x10000000
 
 #define FILE_SHARE_READ                 0x00000001
 #define FILE_SHARE_WRITE                0x00000002
 #define FILE_SHARE_DELETE               0x00000004
 
 #define CREATE_NEW          1
 #define CREATE_ALWAYS       2
 #define OPEN_EXISTING       3
 #define OPEN_ALWAYS         4
 #define TRUNCATE_EXISTING   5
 
 #define FILE_ATTRIBUTE_READONLY             0x00000001
 #define FILE_ATTRIBUTE_HIDDEN               0x00000002
 #define FILE_ATTRIBUTE_SYSTEM               0x00000004
 #define FILE_ATTRIBUTE_DIRECTORY            0x00000010
 #define FILE_ATTRIBUTE_ARCHIVE              0x00000020
 #define FILE_ATTRIBUTE_ENCRYPTED            0x00000040
 #define FILE_ATTRIBUTE_NORMAL               0x00000080
 #define FILE_ATTRIBUTE_TEMPORARY            0x00000100
 #define FILE_ATTRIBUTE_SPARSE_FILE          0x00000200
 #define FILE_ATTRIBUTE_REPARSE_POINT        0x00000400
 #define FILE_ATTRIBUTE_COMPRESSED           0x00000800
 #define FILE_ATTRIBUTE_OFFLINE              0x00001000
 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED  0x00002000
 
 #define FILE_FLAG_WRITE_THROUGH         0x80000000
 #define FILE_FLAG_OVERLAPPED            0x40000000
 #define FILE_FLAG_NO_BUFFERING          0x20000000
 #define FILE_FLAG_RANDOM_ACCESS         0x10000000
 #define FILE_FLAG_SEQUENTIAL_SCAN       0x08000000
 #define FILE_FLAG_DELETE_ON_CLOSE       0x04000000
 #define FILE_FLAG_BACKUP_SEMANTICS      0x02000000
 #define FILE_FLAG_POSIX_SEMANTICS       0x01000000
 #define FILE_FLAG_OPEN_REPARSE_POINT    0x00200000
 #define FILE_FLAG_OPEN_NO_RECALL        0x00100000
 
 #define FORMAT_MESSAGE_ALLOCATE_BUFFER 0x00000100
 #define FORMAT_MESSAGE_IGNORE_INSERTS  0x00000200
 #define FORMAT_MESSAGE_FROM_STRING     0x00000400
 #define FORMAT_MESSAGE_FROM_HMODULE    0x00000800
 #define FORMAT_MESSAGE_FROM_SYSTEM     0x00001000
 #define FORMAT_MESSAGE_ARGUMENT_ARRAY  0x00002000
 #define FORMAT_MESSAGE_MAX_WIDTH_MASK  0x000000FF
 
 ENDPROC
 
 *============================================================
 FUNCTION SaveFile3Time
 PARAMETERS sFileName
 DO DECL_DLL_FUNC
 hFile = CreateFile(sFileName, GENERIC_READ, FILE_SHARE_READ, 0, ;
     OPEN_EXISTING, 0, 0)
 IF hFile = -1
     = MessageBox([CreateFile() error!])
     RETURN .F.
 ENDIF
 PUBLIC gsFt_Creation, gsFt_LastAccess, gsFt_LastWrite
 gsFt_Creation = SPACE(8)
 gsFt_LastAccess = SPACE(8)
 gsFt_LastWrite = SPACE(8)
 rc = GetFileTime(hFile, @gsFt_Creation, @gsFt_LastAccess, @gsFt_LastWrite)
 IF rc <> 1
     = MessageBox([GetFileTime() error!])
     RETURN .F.
 ENDIF
 RETURN .T.
 
 *============================================================
 FUNCTION RestoreFile3Time
 PARAMETERS sFileName
 hFile = CreateFile(sFileName, BITOR(GENERIC_READ, GENERIC_WRITE), ;
     BITOR(FILE_SHARE_READ, FILE_SHARE_WRITE), 0, OPEN_EXISTING, 0, 0)
 IF hFile = -1
     = MessageBox([CreateFile() error!])
     RETURN .F.
 ENDIF
 rc = SetFileTime(hFile, @gsFt_Creation, @gsFt_LastAccess, @gsFt_LastWrite)
 IF rc <> 1
     = MessageBox([GetFileTime() error!])
     RETURN .F.
 ENDIF
 RETURN .T.
 
 *============================================================
 FUNCTION GetFile3Time
 PARAMETERS sFileName
 DO DECL_DLL_FUNC
 hFile = CreateFile(sFileName, GENERIC_READ, FILE_SHARE_READ, 0, ;
     OPEN_EXISTING, 0, 0)
 IF hFile = -1
     gnError = GetLastError()
     = MessageBox([CreateFile() error!] + CHR(13) + ;
         [(] + LTRIM(STR(gnError)) + [) ] + GetSystemErrorMsg(gnError))
     RETURN []
 ENDIF
 PUBLIC gsFt_Creation, gsFt_LastAccess, gsFt_LastWrite
 gsFt_Creation = SPACE(8)
 gsFt_LastAccess = SPACE(8)
 gsFt_LastWrite = SPACE(8)
 rc = GetFileTime(hFile, @gsFt_Creation, @gsFt_LastAccess, @gsFt_LastWrite)
 IF rc <> 1
     = MessageBox([GetFileTime() error!])
     rc = CloseHandle(hFile)
     RETURN []
 ENDIF
 LocF_CreationTime = SPACE(8)
 LocF_LastAccessTime = SPACE(8)
 LocF_LastWriteTime = SPACE(8)
 rc = FileTimeToLocalFileTime(gsFt_Creation, @LocF_CreationTime)
 IF rc <> 1
     = MessageBox([FileTimeToLocalFileTime() error!])
     rc = CloseHandle(hFile)
     RETURN []
 ENDIF
 rc = FileTimeToLocalFileTime(gsFt_LastAccess, @LocF_LastAccessTime)
 IF rc <> 1
     = MessageBox([FileTimeToLocalFileTime() error!])
     rc = CloseHandle(hFile)
     RETURN []
 ENDIF
 rc = FileTimeToLocalFileTime(gsFt_LastWrite, @LocF_LastWriteTime)
 IF rc <> 1
     = MessageBox([FileTimeToLocalFileTime() error!])
     rc = CloseHandle(hFile)
     RETURN []
 ENDIF
 PUBLIC gsCreationDateTime, gsLastAccessDateTime, gsLastWriteDateTime
 gsCreationDateTime = FTime2SysTime(LocF_CreationTime)
 gsLastAccessDateTime = FTime2SysTime(LocF_LastAccessTime)
 gsLastWriteDateTime = FTime2SysTime(LocF_LastWriteTime)
 = MessageBox(sFileName + [:] + CHR(13) + ;
              [CreationDateTime   = ] + gsCreationDateTime + CHR(13) + ;
              [LastAccessDateTime = ] + gsLastAccessDateTime + CHR(13) + ;
              [LastWriteDateTime  = ] + gsLastWriteDateTime)
 rc = CloseHandle(hFile)
 IF rc <> 1
     = MessageBox([CloseHandle() error!])
     RETURN []
 ENDIF
 RETURN gsLastWriteDateTime
 
 *============================================================
 FUNCTION SetFile3Time
 PARAMETERS sFileName, sFDT_Creation, sFDT_Access, sFDT_Write
 DO DECL_DLL_FUNC
 LocF_CreationTime = SysTime2FTime(sFDT_Creation)
 LocF_LastAccessTime = SysTime2FTime(sFDT_Access)
 LocF_LastWriteTime = SysTime2FTime(sFDT_Write)
 IF EMPTY(LocF_CreationTime) OR EMPTY(LocF_LastAccessTime) OR ;
    EMPTY(LocF_LastWriteTime)
     RETURN .F.
 ENDIF
 PUBLIC gsFt_Creation, gsFt_LastAccess, gsFt_LastWrite
 gsFt_Creation = SPACE(8)
 gsFt_LastAccess = SPACE(8)
 gsFt_LastWrite = SPACE(8)
 rc = LocalFileTimeToFileTime(LocF_CreationTime, @gsFt_Creation)
 IF rc <> 1
     = MessageBox([LocalFileTimeToFileTime() error!])
     RETURN .F.
 ENDIF
 rc = LocalFileTimeToFileTime(LocF_LastAccessTime, @gsFt_LastAccess)
 IF rc <> 1
     = MessageBox([LocalFileTimeToFileTime() error!])
     RETURN .F.
 ENDIF
 rc = LocalFileTimeToFileTime(LocF_LastWriteTime, @gsFt_LastWrite)
 IF rc <> 1
     = MessageBox([LocalFileTimeToFileTime() error!])
     RETURN .F.
 ENDIF
 hFile = CreateFile(sFileName, BITOR(GENERIC_READ, GENERIC_WRITE), ;
     BITOR(FILE_SHARE_READ, FILE_SHARE_WRITE), 0, OPEN_EXISTING, 0, 0)
 IF hFile = -1
     gnError = GetLastError()
     = MessageBox([CreateFile() error!] + CHR(13) + ;
         [(] + LTRIM(STR(gnError)) + [) ] + GetSystemErrorMsg(gnError))
     RETURN .F.
 ENDIF
 rc = SetFileTime(hFile, gsFt_Creation, gsFt_LastAccess, gsFt_LastWrite)
 IF rc <> 1
     gnError = GetLastError()
     = MessageBox([SetFileTime() error!]) + CHR(13) + ;
         [(] + LTRIM(STR(gnError)) + [) ] + GetSystemErrorMsg(gnError))
     rc = CloseHandle(hFile)
     RETURN .F.
 ENDIF
 rc = CloseHandle(hFile)
 IF rc <> 1
     = MessageBox([CloseHandle() error!])
     RETURN .F.
 ENDIF
 RETURN .T.
 
 *============================================================
 FUNCTION FTime2SysTime
 PARAMETERS sFileTime
 sSystemTime = SPACE(16)
 rc = FileTimeToSystemTime(sFileTime, @sSystemTime)
 IF rc <> 1
     = MessageBox([FileTimeToSystemTime() error!])
     RETURN []
 ENDIF
 wYear         = HEX1(sSystemTime, 1)  + HEX1(sSystemTime, 2) * 256
 wMonth        = HEX1(sSystemTime, 3)  + HEX1(sSystemTime, 4) * 256
 wDayOfWeek    = HEX1(sSystemTime, 5)  + HEX1(sSystemTime, 6) * 256
 wDay          = HEX1(sSystemTime, 7)  + HEX1(sSystemTime, 8) * 256
 wHour         = HEX1(sSystemTime, 9)  + HEX1(sSystemTime, 10) * 256
 wMinute       = HEX1(sSystemTime, 11) + HEX1(sSystemTime, 12) * 256
 wSecond       = HEX1(sSystemTime, 13) + HEX1(sSystemTime, 14) * 256
 wMilliseconds = HEX1(sSystemTime, 15) + HEX1(sSystemTime, 16) * 256
 sDateTime = Str0(wYear, 4) + [.] + Str0(wMonth, 2) + [.] + Str0(wDay, 2) ;
             + [ ] + ;
             Str0(wHour, 2) + [:] + Str0(wMinute, 2) + [:] + Str0(wSecond, 2) ;
             + [.] + Str0(wMilliseconds, 3)
 * e.g. DateTime: 2000.12.31 12:34:56.789
 RETURN sDateTime
 
 *============================================================
 FUNCTION SysTime2FTime
 PARAMETERS sDateTime
 *sSystemTime = SPACE(16)
 sFileTime = SPACE(8)
 * DateTime: 2000.12.31 12:34:56.789
 * Pos:      12345678901234567890123
 wYear         = VAL(SUBSTR(sDateTime, 1, 4))
 wMonth        = VAL(SUBSTR(sDateTime, 6, 2))
 wDayOfWeek    = 0
 wDay          = VAL(SUBSTR(sDateTime, 9, 2))
 wHour         = VAL(SUBSTR(sDateTime, 12, 2))
 wMinute       = VAL(SUBSTR(sDateTime, 15, 2))
 wSecond       = VAL(SUBSTR(sDateTime, 18, 2))
 wMilliseconds = VAL(SUBSTR(sDateTime, 21, 3))
 sSystemTime = CHR(wYear % 256) + CHR(wYear / 256) + ;
               CHR(wMonth % 256) + CHR(0) + ;
               CHR(wDayOfWeek % 256) + CHR(0) + ;
               CHR(wDay % 256) + CHR(0) + ;
               CHR(wHour % 256) + CHR(0) + ;
               CHR(wMinute % 256) + CHR(0) + ;
               CHR(wSecond % 256) + CHR(0) + ;
               CHR(wMilliseconds % 256) + CHR(wMilliseconds / 256)
 rc = SystemTimeToFileTime(sSystemTime, @sFileTime)
 IF rc <> 1
     = MessageBox([SystemTimeToFileTime() error!])
     RETURN []
 ENDIF
 RETURN sFileTime
 
 *============================================================
 FUNCTION GetSystemErrorMsg
 LPARAMETERS lnErrorNo
 LOCAL szMsgBuffer,lnSize
 
 szMsgBuffer = SPACE(500)
 lnSize = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, lnErrorNo, ;
                        0, @szMsgBuffer, LEN(szMsgBuffer), 0)
 IF lnSize > 2
     szMsgBuffer = SUBSTR(szMsgBuffer, 1, lnSize - 2)
 ELSE
     szMsgBuffer = []
 ENDIF
 RETURN szMsgBuffer
 
 *============================================================
 FUNCTION HEX1
 PARAMETERS sString, nPos
 RETURN ASC(SUBSTR(sString, nPos, 1))
 
 *============================================================
 FUNCTION Str0
 PARAMETERS nNumber, nLen
 RETURN PADL(nNumber, nLen, [0])
 
 *** End of program.
 
  ---- 欢迎光临良友程序库:http://0d0a.126.com http://f12.my163.com,免费提供我的各种Source Code
 
  兄弟我抛出几块砖,有玉的赶紧亮出来啊!   | 
 
 
 |