如何取得一个文件的属性

ciby 2002-05-20 03:38:07
如何(比如用filesystemobject控件)取得一个文件的属性,如大小,版本号,修改时间等?
...全文
22 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ciby 2002-05-21
  • 打赏
  • 举报
回复
谢谢你,风之兄
qbilbo 2002-05-20
  • 打赏
  • 举报
回复
为你专门写了一个获取文件版本号的函数,如下:
Option Explicit
Private Type VS_FIXEDFILEINFO
dwSignature As Long
dwStrucVersionl As Integer
dwStrucVersionh As Integer
dwFileVersionMSl As Integer
dwFileVersionMSh As Integer
dwFileVersionLSl As Integer
dwFileVersionLSh As Integer
dwProductVersionMSl As Integer
dwProductVersionMSh As Integer
dwProductVersionLSl As Integer
dwProductVersionLSh As Integer
dwFileFlagsMask As Long
dwFileFlags As Long
dwFileOS As Long
dwFileType As Long
dwFileSubtype As Long
dwFileDateMS As Long
dwFileDateLS As Long
End Type
Private Declare Function GetFileVersionInfo Lib "Version.dll" Alias "GetFileVersionInfoA" (ByVal lptstrFilename As String, ByVal dwhandle As Long, ByVal dwlen As Long, lpData As Any) As Long
Private Declare Function GetFileVersionInfoSize Lib "Version.dll" Alias "GetFileVersionInfoSizeA" (ByVal lptstrFilename As String, lpdwHandle As Long) As Long
Private Declare Function VerQueryValue Lib "Version.dll" Alias "VerQueryValueA" (pBlock As Any, ByVal lpSubBlock As String, lplpBuffer As Any, puLen As Long) As Long
Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any, ByVal Source As Long, ByVal length As Long)

Function GetVersion(ByVal FullFileName As String) As String
Dim FileVersionLen As Long, fInfor() As Byte, lVerPointer As Long, udtVerBuffer As VS_FIXEDFILEINFO
Dim i As Long

FileVersionLen = GetFileVersionInfoSize(FullFileName, 0)
If FileVersionLen < 1 Then
GetVersion = ""
Exit Function
End If

ReDim fInfor(FileVersionLen)
i = GetFileVersionInfo(FullFileName, 0, FileVersionLen, fInfor(0))
i = VerQueryValue(fInfor(0), "\", lVerPointer, FileVersionLen)
MoveMemory udtVerBuffer, lVerPointer, Len(udtVerBuffer)

GetVersion = Trim(Str(udtVerBuffer.dwFileVersionMSh)) + "." + Trim(Str(udtVerBuffer.dwFileVersionMSl)) + "." + Str((udtVerBuffer.dwFileVersionLSh)) + "." + Trim(Str((udtVerBuffer.dwFileVersionLSl)))
End Function

怎么调用就不用我说了吧。
ciby 2002-05-20
  • 打赏
  • 举报
回复
qbilbo(风之兄)
能否取得版本号?
thinkeasy 2002-05-20
  • 打赏
  • 举报
回复
FileLen 函数

返回一个 Long,代表一个文件的长度,单位是字节。

语法

FileLen(pathname)

必要的 pathname 参数是用来指定一个文件名的字符串表达式。pathname 可以包含目录或文件夹、以及驱动器。

说明

当调用 FileLen 函数时,如果所指定的文件已经打开,则返回的值是这个文件在打开前的大小。

注意 若要取得一个打开文件的长度大小,使用 LOF 函数。


FileDateTime 函数


返回一个 Variant (Date),此为一个文件被创建或最后修改后的日期和时间。

语法

FileDateTime(pathname)

必要的 pathname 参数是用来指定一个文件名的字符串表达式。pathname 可以包含目录或文件夹、以及驱动器。
thinkeasy 2002-05-20
  • 打赏
  • 举报
回复
GetAttr 函数
返回一个 Integer,此为一个文件、目录、或文件夹的属性。

语法

GetAttr(pathname)

必要的 pathname 参数是用来指定一个文件名的字符串表达式。pathname 可以包含目录或文件夹、以及驱动器。

返回值

由 GetAttr 返回的值,是下面这些属性值的总和:

常数 值 描述
vbNormal 0 常规
vbReadOnly 1 只读
vbHidden 2 隐藏
vbSystem 4 系统文件
vbDirectory 16 目录或文件夹
vbArchive 32 上次备份以后,文件已经改变
vbalias 64 指定的文件名是别名。


注意 这些常数是由 VBA 指定的,在程序代码中的任何位置,可以使用这些常数来替换真正的值。

说明

若要判断是否设置了某个属性,在 GetAttr 函数与想要得知的属性值之间使用 And 运算符与逐位比较。如果所得的结果不为零,则表示设置了这个属性值。例如,在下面的 And 表达式中,如果档案 (Archive) 属性没有设置,则返回值为零:

Result = GetAttr(FName) And vbArchive

如果文件的档案属性已设置,则返回非零的数值。
qbilbo 2002-05-20
  • 打赏
  • 举报
回复
Dim FSO As New FileSystemObject
Dim F As File

Set F = FSO.GetFile("c:\window\winmine.exe")

Print F.Attributes '文件的常规属性(只读,存档等)
Print F.DateCreated '文件创建日期
Print F.DateLastAccessed '文件最后访问日期
Print F.DateLastModified '文件最后修改日期
Print F.Size '文件的大小

7,763

社区成员

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

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