如何更改一个目录的最后修改时间?

nofound007 2005-10-09 11:46:37
如题所示!

每个目录都有一个最后修改时间,可以通过DateLastModified得到,那又如何更改这个时间为特定的时间呢?

谢谢各位大侠帮忙……
...全文
244 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
nofound007 2005-10-10
  • 打赏
  • 举报
回复
经过改造,得最后成形的结果如下,与大家一起分享:
'模块
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
Private Declare Function SystemTimeToFileTime Lib "kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime 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 CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function LocalFileTimeToFileTime Lib "kernel32" (lpLocalFileTime As FILETIME, lpFileTime As FILETIME) As Long

Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle 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_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const OPEN_EXISTING = 3
Private Const FILE_FLAG_BACKUP_SEMANTICS = &H2000000
Private Const INVALID_HANDLE_VALUE = -1

Public Function SetDirTime(DirName As String, NewTime As Date) As Boolean
SetDirTime = False
On Error GoTo myError
Dim hDir As Long
Dim tmpTime As SYSTEMTIME
tmpTime.wYear = Year(NewTime)
tmpTime.wMonth = Month(NewTime)
tmpTime.wDay = Day(NewTime)
tmpTime.wDayOfWeek = Weekday(NewTime)
tmpTime.wHour = Hour(NewTime)
tmpTime.wMinute = Minute(NewTime)
tmpTime.wSecond = Second(NewTime)

Dim lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME, lptLocalTime As FILETIME
Dim retval As Boolean
Dim sAttribute As SECURITY_ATTRIBUTES
hDir = CreateFile(DirName, GENERIC_WRITE, FILE_SHARE_READ, sAttribute, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)

If hDir = INVALID_HANDLE_VALUE Then SetDirTime = False: Exit Function

Call SystemTimeToFileTime(tmpTime, lptLocalTime) ' 转换成文件的时间格式
Call LocalFileTimeToFileTime(lptLocalTime, lpCreationTime)
Call LocalFileTimeToFileTime(lptLocalTime, lpLastAccessTime)
Call LocalFileTimeToFileTime(lptLocalTime, lpLastWriteTime)

retval = SetFileTime(hDir, lpCreationTime, lpLastAccessTime, lpLastWriteTime)
CloseHandle (hDir)
SetDirTime = True
Exit Function
myError:

End Function

调用:SetDirTime("D:\tmp", Now) 返回成功与失败,即true或false
northwolves 2005-10-10
  • 打赏
  • 举报
回复
这是一个VC的代码,尝试修改成VB的:

http://www.pcdog.com/p/html/20041122/221120042691_1.htm
nofound007 2005-10-10
  • 打赏
  • 举报
回复
非常感谢,虽然还在在一定的问题,但这问题我可以解决,谢谢!!!
yas 2005-10-10
  • 打赏
  • 举报
回复
'模块
Public 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
Public Declare Function SystemTimeToFileTime Lib "kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime As FILETIME) As Long
Public Declare Function SetFileTime Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Public Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Public 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
Public Const GENERIC_READ = &H80000000
Public Const GENERIC_WRITE = &H40000000
Public Const FILE_SHARE_READ = &H1
Public Const FILE_SHARE_WRITE = &H2
Public Const OPEN_EXISTING = 3
Public Const FILE_FLAG_BACKUP_SEMANTICS = &H2000000
Public Const INVALID_HANDLE_VALUE = -1
Public Function SetDirTime(DirName As String, NewTime As SYSTEMTIME) As Boolean
Dim hDir As Long
Dim lpCreationTime As FILETIME
Dim lpLastAccessTime As FILETIME
Dim lpLastWriteTime As FILETIME
Dim retval As Boolean
Dim sAttribute As SECURITY_ATTRIBUTES
hDir = CreateFile(DirName, GENERIC_WRITE, FILE_SHARE_READ, sAttribute, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)

If hDir = INVALID_HANDLE_VALUE Then SetDirTime = False: Exit Function

Call SystemTimeToFileTime(NewTime, lpCreationTime) ' 转换成文件的时间格式
Call SystemTimeToFileTime(NewTime, lpLastAccessTime)
Call SystemTimeToFileTime(NewTime, lpLastWriteTime)

retval = SetFileTime(hDir, lpCreationTime, lpLastAccessTime, lpLastWriteTime)
CloseHandle (hDir)
SetDirTime = retval
End Function

'窗体
Private Sub Form_Load()
Dim NewTime As SYSTEMTIME
NewTime.wYear = Year(Now)
NewTime.wMonth = Month(Now)
NewTime.wDay = Day(Now)
NewTime.wDayOfWeek = Weekday(Now)
NewTime.wHour = Hour(Now)
NewTime.wMinute = Minute(Now)
NewTime.wSecond = Second(Now)
Call SetDirTime("H:\My Documents", NewTime)
End Sub
nofound007 2005-10-10
  • 打赏
  • 举报
回复
没有人帮忙只有自己开工了……
nofound007 2005-10-10
  • 打赏
  • 举报
回复
看不太懂……

BOOL SetDirTime(char DirName, SYSTEMTIME new—stime) // 修改指定目录的时间
{
HANDLE hDir;

hDir = CreateFile (  // 打开目录的Win32 API调用
DirName,  
GENERIC—READ | GENERIC—WRITE, // 必须“写”方式打开
FILE—SHARE—READ|FILE—SHARE—DELETE,NULL,OPEN—EXISTING, // 打开现存的目录
FILE—FLAG—BACKUP—SEMANTICS, // 只有这样才能打开目录
NULL);

if (hDir ==INVALID—HANDLE—VALUE )
return FALSE; // 打开失败时返回

FILETIME lpCreationTime;  
// creation time目录的创建时间

FILETIME lpLastAccessTime; // last access time最近一次访问目录的时间

FILETIME lpLastWriteTime;  // last write time最近一次修改目录的时间

SystemTimeToFileTime(&new—stime, &lpCreationTime); // 转换成文件的时间格式

SystemTimeToFileTime(&new—stime, &lpLastAccessTime);

SystemTimeToFileTime(&new—stime, &lpLastWriteTime);

BOOL retval = SetFileTime( // 修改目录时间的Win32 API函数调用

hDir, &lpCreationTime,&lpLastAccessTime,&lpLastWriteTime);

  CloseHandle(hDir); // 关闭目录

return retval;

  // 返回修改成功与否的返回码

}

帮个忙,翻译成VB,谢谢!
conrad_wan 2005-10-10
  • 打赏
  • 举报
回复
找找相应api吧
nofound007 2005-10-10
  • 打赏
  • 举报
回复
不懂VC啊,能不能翻译一下啊?

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧