跳到主要内容

获取文件信息

如果你需要获取文件信息,比如文件名、文件目录、文件大小、文件创建日期、文件修改日期、照片分辨率等等,常用的方法是使用 GetDetailsOf 方法。

GetDetailsOf 方法

语法

Folder.GetDetailsOf(vItem, iColumn)

参数

名称 必需/可选 数据类型 说明
vItem 必需 Variant 要为其检索信息的项。这必须是 FolderItem 对象。
iColumn 必需 整数 指定要检索的信息的 Integer 值。项的可用信息取决于显示该项的文件夹。此值对应于 Shell 视图中显示的从零开始的列号。

下表列出了使用 GetDetailsOf 方法的常用值:

项目
名称 0
大小 1
项目类型 2
修改日期 3
创建日期 4
访问日期 5
属性 6
脱机状态 7
可用性 8
假设的类型 9
所有者 10
种类 11
拍摄日期 12
参与创作的艺术家 13
唱片集 14
15
流派 16
指挥者 17
标记 18
分级 19
作者 20
标题 21
主题 22
类别 23
备注 24
版权 25
# 26
时长 27
比特率 28
保护 29
照相机型号 30
分辨率 31
照相机制造商 32
公司 33
文件说明 34
主机关键字 35

示例:列出 GetDetailsOf 的参数取值

Sub GetDetailsOfDemo()

    ' 创建一个新的工作表
    Sheets.Add
    
    ' 定义两个变量用于 Shell 应用程序和文件夹对象
    Dim objShell, objFolder
    
    ' 创建 Shell.Application 对象以访问系统文件夹属性
    Set objShell = CreateObject("Shell.Application")
    
    ' 设置 objFolder 为指定路径 "C:\" 的文件夹对象
    ' 该对象用于访问文件夹及其详细信息
    Set objFolder = objShell.Namespace("C:\")
    
    ' 使用循环来遍历文件夹属性,范围从 0 到 100(如果你想获取更多,更改100为其它数字)
    For i = 0 To 100
        ' 获取该属性的名称(通过 objFolder.GetDetailsOf 方法)
        ' 并将其写入到 Excel 的第一列(第 i + 1 行)
        Cells(i + 1, 1) = objFolder.GetDetailsOf(objFolder.Items, i)
        
        ' 将属性的索引值(i)写入到 Excel 的第二列(第 i + 1 行)
        Cells(i + 1, 2) = i
    Next
    
End Sub

示例:获取指定文件夹下的照片信息

本示例能从选择的文件夹中获取文件后缀为 .png.jpg.jpeg 的照片详细信息,并将这些信息写入到 Excel 工作表中。程序运行效果如下:

示例:获取指定文件夹下的照片信息
Sub GetPhotoDetails()

    ' 定义一个文件对话框对象,用于选择文件夹
    Dim fd As FileDialog
    ' 创建文件夹选择对话框(文件对话框的类型为文件夹选择)
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    
    ' 如果用户选择了文件夹(对话框返回-1表示选择了一个文件夹)
    Dim GetDirectory As Variant
    If fd.Show = -1 Then
        ' 获取所选文件夹的路径,并赋值给 GetDirectory
        GetDirectory = fd.SelectedItems(1)
    End If
    
    ' 定义变量来处理文件夹中的项目和行数等
    Dim Item As Long, RowCount As Long, i As Long
    ' 用于 Shell 应用程序,获取文件夹的详细信息
    Dim FileName As Object, objShell As Object, ObiFolder As Object
    
    ' 创建 Shell 对象,以便能访问文件系统的详细信息
    Set objShell = CreateObject("shell.Application")
    ' 使用 Shell 对象获取目标文件夹的文件夹对象
    Set ObiFolder = objShell.Namespace(GetDirectory)    
    
    ' 设置常见图片文件扩展名
    Dim imageExtensions As String
    imageExtensions = "png,jpg,jpeg,gif,bmp,tiff"    
    
    ' 设置错误处理,当有错误发生时继续执行代码
    On Error Resume Next
    
    ' 禁用屏幕更新,以提高代码执行效率
    Application.ScreenUpdating = False
    
    ' 初始化 RowCount,表示行号
    RowCount = 1
    
    ' 遍历文件夹中的每一个文件
    For Each FileName In ObiFolder.Items
        ' 只列出 PNG, JPEG 和 JPG 文件,如果不需要过滤,则注释掉下一行(41)和对应的 End If (63)行。
        If FileName.Type = "PNG 文件" Or FileName.Type = "JPEG 文件" Or FileName.Type = "JPG 文件" Then
            ' 初始化项(列)编号为 0
            Item = 0
            ' 行号增加,准备填写下一行
            RowCount = RowCount + 1
            
            ' 循环获取文件属性的索引,从 0 到 33(假设是文件属性索引)
            For i = 0 To 33
                ' 如果属性的索引是特定值(0-5,12,30-32),则获取对应的文件属性
                If i < 6 Or i = 12 Or (i > 29 And i < 33) Then
                    ' 增加列计数器
                    Item = Item + 1
                    ' 获取当前文件属性并写入到 Excel 工作表中相应的单元格
                    Cells(RowCount, Item) = ObiFolder.GetDetailsOf(FileName, i)
                    
                    ' 如果是第一行(RowCount = 2),则在第一行中写入列名
                    If RowCount = 2 Then
                        ' 获取该列的属性名称(用于表头)
                        Cells(1, Item) = ObiFolder.GetDetailsOf(ObiFolder.Items, i)
                    End If
                End If
            Next i
        End If
    Next FileName
    
    ' 释放文件对话框对象
    Set fd = Nothing
    
    ' 重新启用屏幕更新
    Application.ScreenUpdating = True
End Sub

评论

您的电子邮件地址不会显示出来。*号为必填项。