【VBA研究】如何用VBA读取文件的日期时间
文件的日期时间分创建时间和修改时间,文件一旦创建,创建时间就定下不变了,所以日常应用中一般都是取修改时间,我的一个应用(生成二维码)中就是取这个时间判断图片文件是否重新生成。
1、取文件的修改时间VBA有专门的函数FileDateTime,如下面的语句:
PicName = ThisWorkbook.Path & "\YiCode.bmp"
t_now = Now()
tim1 = Timer
GenPic = "Fail"
'此处省略。。。。。
Do While Timer < tim1 + 5 '5秒内文件日期没变化则编码失败
If t_now <= FileDateTime(PicName) Then
GenPic = "OK"
UpdatePic
Exit Do
End If
Loop
2、如果必须取文件的创建时间,则需要用到文件系统对象了,其属性:
DateCreated 属性
返回指定文件或文件夹的创建日期和时间。
DateLastModified属性
返回最后一次修改指定文件或文件夹的日期和时间
DateLastAccessed属性
返回最后一次访问指定文件或文件夹的日期和时间
3、关于这三个时间的几个问题
1)文件创建时间和修改时间一致的问题。这是因为文件是在编辑完成之后才保存的,所以创建时间和修改时间是一致的,就像你用word敲了一篇稿子,敲完后保存成文件,这时候文件的创建时间和修改时间是一致辞的,如果你再没有打开过这个文件,那么连访问时间也是一致的。
2)文件创建时间晚于修改时间的问题。这个创建时间是指文件在你的电脑上创建的时间,而并非该文件最初产生的时间,最简单的,你把文件复制一份,看看创建时间,是不是在修改时间之后?答案是肯定的。
3、关于文件的访问时间。这个时间现在和修改时间一致,当初定义的这个访问时间是跟着访问修改的(访问不只是只读不写,查看目录属性也是访问),但随着硬盘的增大,文件的增多,几十万个文件都是常事,如果读操作再加一个写操作,那么这个确实会影响电脑的性能,用户体验也不好,所以从 XP2003 SP1起,为了性能,默认把LastAccessTime(最后访问时间)给禁用了。只有在修改文件时,才会顺便更新访问时间。
下图是各个文件系统对时间的支持情况:
* 默认禁用是可以打开的,命令如下(0是打开,1是禁用):
fsutil behavior set disablelastaccess 0
4、提取文件的这些属性,看下面例子:
Sub Command1_Click()
Application.ScreenUpdating = False
Set fso = CreateObject("Scripting.FileSystemObject")
strfile = Application.InputBox("请输入文件的完整名称:", "请输入文件的完整名称:", , , , , , 2)
Set objfile = fso.GetFile(strfile)
If fso.fileexists(strfile) Then
sReturn = "文件属性: " & objfile.Attributes & vbCrLf
sReturn = sReturn & "文件创建日期: " & objfile.DateCreated & vbCrLf
sReturn = sReturn & "文件修改日期: " & objfile.DateLastModified & vbCrLf
sReturn = sReturn & "文件大小 " & FormatNumber(objfile.Size / 1024, -1)
sReturn = sReturn & "Kb" & vbCrLf
sReturn = sReturn & "文件类型: " & objfile.Type & vbCrLf
MsgBox sReturn
Else
MsgBox strfile & " :不存在"
End If
Application.ScreenUpdating = True
End Sub
上一篇: 建立STM32工程
下一篇: zblog常用到的几个标签介绍