精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● VFP>>〖外部引用〗>>WINDOWS文件3个时间获取和设置函数

主题:WINDOWS文件3个时间获取和设置函数
发信人: 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

兄弟我抛出几块砖,有玉的赶紧亮出来啊!
  

[关闭][返回]