程序员人生 网站导航

pb9获取文件创建时间、最后修改时间及设置最后修改时间的方法

栏目:sybase时间:2014-05-31 18:12:51

    将以下内容保存为本地文件n_cst_filetime.sru,然后导入pbl中
[cpp]
$PBExportHeader$n_cst_filetime.sru 
$PBExportComments$与文件时间有关的外部函数 
forward 
global type n_cst_filetime from nonvisualobject 
end type 
type os_filedatetime from structure within n_cst_filetime 
end type 
type os_fileopeninfo from structure within n_cst_filetime 
end type 
type os_finddata from structure within n_cst_filetime 
end type 
type os_securityattributes from structure within n_cst_filetime 
end type 
type os_systemtime from structure within n_cst_filetime 
end type 
end forward 
 
type os_filedatetime from structure 
    unsignedlong        ul_lowdatetime 
    unsignedlong        ul_highdatetime 
end type 
 
type os_fileopeninfo from structure 
    character        c_length 
    character        c_fixed_disk 
    unsignedinteger        ui_dos_error 
    unsignedinteger        ui_na1 
    unsignedinteger        ui_na2 
    character        c_pathname[128] 
end type 
 
type os_finddata from structure 
    unsignedlong        ul_fileattributes 
    os_filedatetime        str_creationtime 
    os_filedatetime        str_lastaccesstime 
    os_filedatetime        str_lastwritetime 
    unsignedlong        ul_filesizehigh 
    unsignedlong        ul_filesizelow 
    unsignedlong        ul_reserved0 
    unsignedlong        ul_reserved1 
    character        ch_filename[260] 
    character        ch_alternatefilename[14] 
end type 
 
type os_securityattributes from structure 
    unsignedlong        ul_length 
    string        ch_description 
    boolean        b_inherit 
end type 
 
type os_systemtime from structure 
    unsignedinteger        ui_wyear 
    unsignedinteger        ui_wmonth 
    unsignedinteger        ui_wdayofweek 
    unsignedinteger        ui_wday 
    unsignedinteger        ui_whour 
    unsignedinteger        ui_wminute 
    unsignedinteger        ui_wsecond 
    unsignedinteger        ui_wmilliseconds 
end type 
 
global type n_cst_filetime from nonvisualobject autoinstantiate 
end type 
  
type prototypes 
//获得应用程序名用 
//Function uint GetModuleFileNameA(ulong hModule,ref string lpFilename,ulong nSize) Library "kernel32.dll" //获取应用程序运行目录 
 
//文件操作 
Function long FindFirstFileA (ref string filename, ref os_finddata findfiledata) library "kernel32.dll" 
Function boolean FindNextFileA (long handle, ref os_finddata findfiledata) library "kernel32.dll" 
Function boolean FindClose (long handle) library "kernel32.dll" 
Function long    OpenFile (ref string filename, ref os_fileopeninfo of_struct, ulong action) LIBRARY "kernel32.dll" 
Function boolean CloseHandle (long file_hand) LIBRARY "kernel32.dll" 
Function boolean GetFileTime(long hFile, ref os_filedatetime  lpCreationTime, ref os_filedatetime  lpLastAccessTime, ref os_filedatetime  lpLastWriteTime  )  library "kernel32.dll" 
Function boolean FileTimeToSystemTime(ref os_filedatetime lpFileTime, ref os_systemtime lpSystemTime) library "kernel32.dll" 
Function boolean FileTimeToLocalFileTime(ref os_filedatetime lpFileTime, ref os_filedatetime lpLocalFileTime) library "kernel32.dll" 
Function boolean SetFileTime(long hFile, os_filedatetime  lpCreationTime, os_filedatetime  lpLastAccessTime, os_filedatetime  lpLastWriteTime  )  library "kernel32.dll" 
Function boolean SystemTimeToFileTime(os_systemtime lpSystemTime, ref os_filedatetime lpFileTime) library "kernel32.dll" 
Function boolean LocalFileTimeToFileTime(ref os_filedatetime lpLocalFileTime, ref os_filedatetime lpFileTime) library "kernel32.dll"  
 
end prototypes 
 
type variables 
 
end variables 
 
forward prototypes 
public function integer of_getcreatedatetime (string as_filename, ref datetime adt) 
public function integer of_getlastwritedatetime (string as_filename, ref datetime adt) 
public function integer of_setlastwritedatetime (string as_filename, datetime adt) 
private function integer of_convertfiledatetimetopb (os_filedatetime astr_filetime, ref datetime adt) 
private function integer of_convertpbdatetimetofile (datetime adt, ref os_filedatetime astr_filetime) 
end prototypes 
 
public function integer of_getcreatedatetime (string as_filename, ref datetime adt);//得到文件创建的时间 
long ll_handle 
os_finddata    lstr_FindData 
 
// Get the file information 
ll_handle = FindFirstFileA(as_FileName, lstr_FindData) 
If ll_handle <= 0 Then Return -1 
FindClose(ll_handle) 
 
// Convert the date and time 
Return of_ConvertFileDatetimeToPB(lstr_FindData.str_CreationTime, adt) 
end function 
 
public function integer of_getlastwritedatetime (string as_filename, ref datetime adt);//得到文件最后修改的时间 
long    ll_handle 
os_finddata    lstr_FindData 
 
// Get the file information 
ll_handle = FindFirstFileA(as_FileName, lstr_FindData) 
If ll_handle <= 0 Then Return -1 
FindClose(ll_handle) 
 
// Convert the date and time 
Return of_ConvertFileDatetimeToPB(lstr_FindData.str_LastWriteTime, adt) 
end function 
 
public function integer of_setlastwritedatetime (string as_filename, datetime adt);//设置文件最后修改时间 
boolean lb_Ret 
long ll_handle 
os_filedatetime lstr_FileTime, lstr_Empty 
os_finddata lstr_FindData 
os_fileopeninfo lstr_FileInfo 
 
// Get the file information. 
// This is required to keep the Last Access date from changing. 
// It will be changed by the OpenFile function. 
ll_handle = FindFirstFileA(as_FileName, lstr_FindData) 
If ll_handle <= 0 Then Return -1 
FindClose(ll_handle) 
 
// Convert the date and time 
If of_ConvertPBDatetimeToFile(adt, lstr_FileTime) < 0 Then Return -1 
 
// Set the file structure information 
lstr_FileInfo.c_fixed_disk = "~000" 
lstr_FileInfo.c_pathname = as_FileName 
lstr_FileInfo.c_length = "~142" 
 
// Open the file 
ll_handle = OpenFile ( as_filename, lstr_FileInfo, 2 )  
If ll_handle < 1 Then Return -1 
  
lb_Ret = SetFileTime(ll_handle, lstr_Empty, lstr_FindData.str_LastAccessTime, lstr_FileTime) 
 
CloseHandle(ll_handle) 
 
If lb_Ret Then 
    Return 1 
Else 
    Return -1 
End If 
 
end function 
 
private function integer of_convertfiledatetimetopb (os_filedatetime astr_filetime, ref datetime adt);//转换文件系统时间为PB时间 
os_filedatetime    lstr_LocalTime 
os_systemtime    lstr_SystemTime 
 
If Not FileTimeToLocalFileTime(astr_FileTime, lstr_LocalTime) Then Return -1 
 
If Not FileTimeToSystemTime(lstr_LocalTime, lstr_SystemTime) Then Return -1 
 
adt = datetime(blob(String(lstr_SystemTime.ui_wyear) + "-" + & 
             String(lstr_SystemTime.ui_WMonth) + "-" + & 
             String(lstr_SystemTime.ui_WDay) + ' ' + & 
             String(lstr_SystemTime.ui_wHour) + ":" + & 
             String(lstr_SystemTime.ui_wMinute) + ":" + & 
             String(lstr_SystemTime.ui_wSecond) + ":" + & 
             String(lstr_SystemTime.ui_wMilliseconds))) 
Return 1 
end function 
 
private function integer of_convertpbdatetimetofile (datetime adt, ref os_filedatetime astr_filetime);//转换文件系统时间为PB时间 
os_filedatetime    lstr_LocalTime 
os_systemtime    lstr_SystemTime 
 
lstr_SystemTime.ui_wyear = year(date(adt)) 
lstr_SystemTime.ui_WMonth = Month(date(adt)) 
lstr_SystemTime.ui_WDay = Day(date(adt)) 
 
lstr_SystemTime.ui_wHour = hour(time(adt)) 
lstr_SystemTime.ui_wMinute = Minute(time(adt)) 
lstr_SystemTime.ui_wSecond = Second(time(adt)) 
lstr_SystemTime.ui_wMilliseconds = Long(String(adt, "fff")) 
 
If Not SystemTimeToFileTime(lstr_SystemTime, lstr_LocalTime) Then Return -1 
 
If Not LocalFileTimeToFileTime(lstr_LocalTime, astr_FileTime) Then Return -1 
 
Return 1 
end function 
 
on n_cst_filetime.create 
call super::create 
TriggerEvent( this, "constructor" ) 
end on 
 
on n_cst_filetime.destroy 
TriggerEvent( this, "destructor" ) 
call super::destroy 
end on 
 
程序中这样调用即可:
[cpp]
n_cst_filetime ln 
string ls_file = 'C:Program FilesSybasePowerBuilder 9.0pb90.exe' 
datetime ldt_create, ldt_lastwrite 
ln.of_getcreatedatetime( ls_file, ldt_create) 
ln.of_getlastwritedatetime( ls_file, ldt_lastwrite) 
messagebox('提示', '文件【' + ls_file + '】~r~n~r~n创建时间:  ' + string(ldt_create, 'yyyy年mm月dd日, hh:mm:ss.fff') +& 
                            '~r~n修改日期:  ' + string(ldt_lastwrite, 'yyyy年mm月dd日, hh:mm:ss.fff') ) 
 

摘自 yyoinge的专栏
------分隔线----------------------------
------分隔线----------------------------

最新技术推荐