'This project needs a Common Dialog box, named CDBox.
' (To add the Common Dialog Box to your tools menu, go to Project->Components (or press CTRL-T)
' and select Microsoft Common Dialog control)
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Private Const GENERIC_WRITE = &H40000000
Private Const OPEN_EXISTING = 3
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function SetFileTime Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
Private Declare Function SystemTimeToFileTime Lib "kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime As FILETIME) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function LocalFileTimeToFileTime Lib "kernel32" (lpLocalFileTime As FILETIME, lpFileTime As FILETIME) As Long
Private Sub Form_Load()
Dim m_Date As Date, lngHandle As Long
Dim udtFileTime As FILETIME
Dim udtLocalTime As FILETIME
Dim udtSystemTime As SYSTEMTIME
m_Date = Format(Now, "DD-MM-YY")
'Set the dialog's title
CDBox.DialogTitle = "Choose a file ..."
'Set the dialog's filter
CDBox.Filter = "All Files (*.*)|*.*"
'Show the 'Open File'-dialog
CDBox.ShowOpen
udtSystemTime.wYear = Year(m_Date)
udtSystemTime.wMonth = Month(m_Date)
udtSystemTime.wDay = Day(m_Date)
udtSystemTime.wDayOfWeek = WeekDay(m_Date) - 1
udtSystemTime.wHour = Hour(m_Date)
udtSystemTime.wSecond = Second(m_Date)
udtSystemTime.wMilliseconds = 0
' convert system time to local time
SystemTimeToFileTime udtSystemTime, udtLocalTime
' convert local time to GMT
LocalFileTimeToFileTime udtLocalTime, udtFileTime
' open the file to get the filehandle
lngHandle = CreateFile(CDBox.Filename, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
' change date/time property of the file
SetFileTime lngHandle, udtFileTime, udtFileTime, udtFileTime
' close the handle
CloseHandle lngHandle
MsgBox "The date of the file '" + CDBox.Filename + "' has been changed to" + Str$(m_Date), vbInformation + vbOKOnly, App.Title
End Sub
附:
VB聲明
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
別名
CreateFileA
說明
這是壹個全功能的例程,可打開和創建文件、管道、郵槽、通信服務、設備以及控制臺
返回值
Long,如執行成功,則返回文件句柄。INVALID_HANDLE_VALUE表示出錯,會設置GetLastError。即使函數成功,但若文件存在,且指定了CREATE_ALWAYS
或 OPEN_ALWAYS,GetLastError也會設為ERROR_ALREADY_EXISTS
備註
打開壹個通信端口時(如COM1),無論如何都要設置成
OPEN_EXISTING
這個函數代替了lOpen 和 lCreate函數,應該是我們的首選
參數表
lpFileName ----- String,要打開的文件的名字
dwDesiredAccess - Long,如果為 GENERIC_READ
表示允許對設備進行讀訪問;如果為 GENERIC_WRITE
表示允許對設備進行寫訪問(可組合使用);如果為零,表示只允許獲取與壹個設備有關的信息
dwShareMode ---- Long,零表示不***享; FILE_SHARE_READ 和/或
FILE_SHARE_WRITE 表示允許對文件進行***享訪問
lpSecurityAttributes - SECURITY_ATTRIBUTES,指向壹個SECURITY_ATTRIBUTES結構的指針,定義了文件的安全特性(如果操作系統支持的話)
dwCreationDisposition - Long,下述常數之壹:
CREATE_NEW
創建文件;如文件存在則會出錯
CREATE_ALWAYS
創建文件,會改寫前壹個文件
OPEN_EXISTING
文件必須已經存在。由設備提出要求
OPEN_ALWAYS
如文件不存在則創建它
TRUNCATE_EXISTING
講現有文件縮短為零長度
dwFlagsAndAttributes - Long,壹個或多個下述常數
FILE_ATTRIBUTE_ARCHIVE
標記歸檔屬性
FILE_ATTRIBUTE_COMPRESSED
將文件標記為已壓縮,或者標記為文件在目錄中的默認壓縮方式
FILE_ATTRIBUTE_NORMAL
默認屬性
FILE_ATTRIBUTE_HIDDEN
隱藏文件或目錄
FILE_ATTRIBUTE_READONLY
文件為只讀
FILE_ATTRIBUTE_SYSTEM
文件為系統文件
FILE_FLAG_WRITE_THROUGH
操作系統不得推遲對文件的寫操作
FILE_FLAG_OVERLAPPED
允許對文件進行重疊操作
FILE_FLAG_NO_BUFFERING
禁止對文件進行緩沖處理。文件只能寫入磁盤卷的扇區塊
FILE_FLAG_RANDOM_ACCESS
針對隨機訪問對文件緩沖進行優化
FILE_FLAG_SEQUENTIAL_SCAN
針對連續訪問對文件緩沖進行優化
FILE_FLAG_DELETE_ON_CLOSE
關閉了上壹次打開的句柄後,將文件刪除。特別適合臨時文件
也可在Windows NT下組合使用下述常數標記:
SECURITY_ANONYMOUS, SECURITY_IDENTIFICATION,
SECURITY_IMPERSONATION, SECURITY_DELEGATION, SECURITY_CONTEXT_TRACKING,
SECURITY_EFFECTIVE_ONLY
hTemplateFile -- Long,如果不為零,則指定壹個文件句柄。新文件將從這個文件中復制擴展屬性