- 帖子
- 96
- 主題
- 18
- 精華
- 0
- 積分
- 125
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Office 2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2014-3-23
- 最後登錄
- 2022-8-2
|
2#
發表於 2018-4-12 16:22
| 只看該作者
回復 1# smart3135
後來爬文有找到這個,可以批次變更檔案最後修改時間
不過會連建立時間與存取時間一起變更
不知道能不能單純只變更檔案最後修改時間,另外兩個時間不去動到- '檔案時間讀取、設定的 API 及常數宣告
- 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 GetFileTime Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FileTime, lpLastAccessTime As FileTime, lpLastWriteTime As FileTime) 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 FileTimeToSystemTime Lib "kernel32" (lpFileTime As FileTime, lpSystemTime As SYSTEMTIME) As Long
- Private Declare Function LocalFileTimeToFileTime Lib "kernel32" (lpLocalFileTime As FileTime, lpFileTime As FileTime) As Long
- Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
- Private Const GENERIC_WRITE = &H40000000
- Private Const OPEN_EXISTING = 3
- Private Const FILE_SHARE_READ = &H1
- Private Const FILE_SHARE_WRITE = &H2
- 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 Type FileTime
- dwLowDateTime As Long
- dwHighDateTime As Long
- End Type
- '取得檔案時間
- Private Function GetTime(f As String, t1 As FileTime, t2 As FileTime, t3 As FileTime)
- lngHandle = CreateFile(f, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
- GetFileTime lngHandle, t1, t1, t2
- CloseHandle lngHandle
- End Function
- '設定檔案時間
- Private Function SetTime(f As String, t1 As FileTime, t2 As FileTime, t3 As FileTime)
- lngHandle = CreateFile(f, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
- SetFileTime lngHandle, t1, t1, t2
- CloseHandle lngHandle
- End Function
- Private Sub Command1_Click()
- Dim 檔名 As String
- Dim 新日期時間 As Date
- Dim 檔案建立時間 As FileTime
- Dim 最後讀取時間 As FileTime
- Dim 最後修改時間 As FileTime
- Dim tmp As SYSTEMTIME
-
- 新日期時間 = Now '<-----------預設檔案時間為當下
- 路徑 = "d:\tmp\" '<-----------檔案所在的資料夾
- 檔案類型 = "*.*" '<-----------選取的檔案類型
-
- tmp.wYear = Year(新日期時間)
- tmp.wMonth = Month(新日期時間)
- tmp.wDay = Day(新日期時間)
- tmp.wHour = Hour(新日期時間)
- tmp.wMinute = Minute(新日期時間)
- tmp.wSecond = Second(新日期時間)
- tmp.wMilliseconds = 0
-
- SystemTimeToFileTime tmp, 檔案建立時間
- LocalFileTimeToFileTime 檔案建立時間, 檔案建立時間
-
- 最後讀取時間 = 檔案建立時間 '<-----------把三個時間都設成一致
- 最後修改時間 = 檔案建立時間
-
- SetTime 檔名, 檔案建立時間, 最後讀取時間, 最後修改時間
-
- '進行更改
- 檔名 = Dir(路徑 & 檔案類型, vbNormal Or vbArchive Or vbReadOnly)
- Do While 檔名 <> ""
- SetTime 路徑 & 檔名, 檔案建立時間, 最後讀取時間, 最後修改時間
- 檔名 = Dir
- Loop
-
- End Sub
複製代碼 |
|