通过代码设置文件的创建、访问及修改时间

*通过代码设置文件的创建、访问及修改时间
*返回值,.T.表示成功,.F.表示失败
*参数表
*参数 类型及说明
*hFile Long 系统文件句柄
*lpCreationTime FILETIME 文件的创建时间
*lpLastAccessTime FILETIME 文件上一次访问的时间
*lpLastWriteTime FILETIME 文件最近一次修改的时间
*---------------------------------------

Clear
? WinSetFileTime ( "c:\test.dbf", "w", 2002, 1, 1, 8, 8, 8, 888 ) && 文件最近一次修改的时间
? WinSetFileTime ( "c:\test.dbf", "a", 2003, 1, 1, 8, 8, 8, 888 ) && 文件上一次访问的时间
? WinSetFileTime ( "c:\test.dbf", "c", 2001, 1, 1, 8, 8, 8, 888 ) && 文件的创建时间
Return

*---------------------------
Procedure WinSetFileTime
Lparameters m.uFl, m.cTimeType, m.nYear, m.nMonth,m.nDay, m.nHour, m.nMinute, m.nSec, m.nThou
#Define OF_READWRITE 2
Local m.lpFileInformation, m.cS, m.nPar, m.fh,;
m.lpFileInformation, m.lpSYSTIME, m.cCreation,;
m.cLastAccess, m.cLastWrite, m.cBuffTime, m.cBuffTime1,;
m.cTT,m.nYear1, m.nMonth1, m.nDay1, m.nHour1,;
m.nMinute1, m.nSec1, m.nThou1
m.nPar=PARAMETERS()
If m.nPar < 1
Return .F.
Endif
= decl()
m.cTT=IIF(m.nPar>=2 AND TYPE("m.cTimeType")="C";
AND !EMPTY(m.cTimeType),LOWER(SUBSTR(m.cTimeType,1,1)),"c")
m.nYear1=IIF(m.nPar>=3 AND TYPE("m.nYear")$"FIN";
AND m.nYear>=1800,ROUND(m.nYear,0),-1)
m.nMonth1=IIF(m.nPar>=4 AND TYPE("m.nMonth")$"FIN";
AND BETWEEN(m.nMonth,1,12),ROUND(m.nMonth,0),-1)
m.nDay1=IIF(m.nPar>=5 AND TYPE("m.nDay")$"FIN";
AND BETWEEN(m.nDay,1,31),ROUND(m.nDay,0),-1)
m.nHour1=IIF(m.nPar>=6 AND TYPE("m.nHour")$"FIN";
AND BETWEEN(m.nHour,0,23),ROUND(m.nHour,0),-1)
m.nMinute1=IIF(m.nPar>=7 AND TYPE("m.nMinute")$"FIN";
AND BETWEEN(m.nMinute,0,59),ROUND(m.nMinute,0),-1)
m.nSec1=IIF(m.nPar>=8 AND TYPE("m.nSec")$"FIN";
AND BETWEEN(m.nSec,0,59),ROUND(m.nSec,0),-1)
m.nThou1=IIF(m.nPar>=9 AND TYPE("m.nThou")$"FIN";
AND BETWEEN(m.nThou,0,999),ROUND(m.nThou,0),-1)
m.lpFileInformation = REPLI (CHR(0), 53) && just a buffer
m.lpSYSTIME = REPLI (CHR(0), 16) && just a buffer
If GetFileAttributesEx (m.uFl, 0, @lpFileInformation) = 0
Return .F.
Endif
m.cCreation = SUBSTR(m.lpFileInformation,5,8)
m.cLastAccess = SUBSTR(m.lpFileInformation,13,8)
m.cLastWrite = SUBSTR(m.lpFileInformation,21,8)
m.cBuffTime = IIF(m.cTT="w",m.cLastWrite, IIF(m.cTT="a",m.cLastAccess,m.cCreation))
FileTimeToSystemTime(m.cBuffTime, @lpSYSTIME)
m.lpSYSTIME=;
IIF(m.nYear1>=0,Int2Word(m.nYear1),SUBSTR(m.lpSYSTIME,1,2))+;
IIF(m.nMonth1>=0,Int2Word(m.nMonth1),SUBSTR(m.lpSYSTIME,3,2))+;
SUBSTR(m.lpSYSTIME,5,2)+;
IIF(m.nDay1>=0,Int2Word(m.nDay1),SUBSTR(m.lpSYSTIME,7,2))+;
IIF(m.nHour1>=0,Int2Word(m.nHour1),SUBSTR(m.lpSYSTIME,9,2))+;
IIF(m.nMinute1>=0,Int2Word(m.nMinute1),SUBSTR(m.lpSYSTIME,11,2))+;
IIF(m.nSec1>=0,Int2Word(m.nSec1),SUBSTR(m.lpSYSTIME,13,2))+;
IIF(m.nThou1>=0,Int2Word(m.nThou1),SUBSTR(m.lpSYSTIME,15,2))
SystemTimeToFileTime(m.lpSYSTIME,@cBuffTime)
m.cBuffTime1=m.cBuffTime
LocalFileTimeToFileTime(m.cBuffTime1,@cBuffTime)
Do CASE
Case m.cTT = "w"
m.cLastWrite=m.cBuffTime
Case m.cTT = "a"
m.cLastAccess=m.cBuffTime
Otherwise
m.cCreation=m.cBuffTime
Endcase
m.fh = _lopen (m.uFl, OF_READWRITE)
If m.fh < 0
Return .F.
Endif
lnretu = SetFileTime (m.fh, m.cCreation, m.cLastAccess, m.cLastWrite)
_lclose(m.fh)
Return iif(lnretu=0, .F., .T.)
Function Int2Word
Lparameters m.nVal
Return Chr(MOD(m.nVal,256)) + CHR(INT(m.nVal/256))
Endfunc
Function decl
Declare INTEGER SetFileTime IN kernel32;
INTEGER hFile,;
STRING lpCreationTime,;
STRING lpLastAccessTime,;
STRING lpLastWriteTime
Declare INTEGER GetFileAttributesEx IN kernel32;
STRING lpFileName,;
INTEGER fInfoLevelId,;
STRING @ lpFileInformation
Declare INTEGER LocalFileTimeToFileTime IN kernel32;
STRING LOCALFILETIME,;
STRING @ FILETIME
Declare INTEGER FileTimeToSystemTime IN kernel32;
STRING FILETIME,;
STRING @ SYSTEMTIME
Declare INTEGER SystemTimeToFileTime IN kernel32;
STRING lpSYSTEMTIME,;
STRING @ FILETIME
Declare INTEGER _lopen IN kernel32;
STRING lpFileName, INTEGER iReadWrite
Declare INTEGER _lclose IN kernel32 INTEGER hFile
Endfunc
Endproc

Published At
Categories with 数据库类
comments powered by Disqus