将以下内容保存为本地文件n_cst_filetime.sru,然后导入pbl中
$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
n_cst_filetime ln string ls_file = 'C:\Program Files\Sybase\PowerBuilder 9.0\pb90.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') )