发信人: 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
兄弟我抛出几块砖,有玉的赶紧亮出来啊! |
|