HOW TO:获取文件扩展属性

原创 2006年06月10日 22:22:00
Author:水如烟

Option Strict Off

Namespace uIO

    
Public Class File

        
'前期绑定的话需引用COM:Microsoft Shell Controls And Automation
        Public Shared Function GetDetails(ByVal file As StringAs Dictionary(Of StringObject)
            
Dim mResult As New Dictionary(Of StringObject)


            
Dim mPath As String '取文件或目录的路径
            Dim mFileName As String  '取文件名或目录名

            
If IO.File.Exists(file) Then  '如是文件
                Dim tmpFileInfo As New IO.FileInfo(file)
                
With tmpFileInfo
                    mPath 
= .DirectoryName
                    mFileName 
= .Name
                
End With
            
Else
                
If IO.Directory.Exists(file) Then '如是目录
                    Dim tmpDirectoryInfo As New IO.DirectoryInfo(file)
                    
With tmpDirectoryInfo
                        
If .Parent Is Nothing Then
                            
Throw New Exception '不能查询根目录
                        Else
                            mPath 
= .Parent.FullName
                            mFileName 
= .Name
                        
End If
                    
End With
                
Else
                    
Throw New IO.FileNotFoundException '文件或目录无效
                End If
            
End If


            
Dim mShell As Object 'Shell32.Shell '
            Dim mFolder As Object 'Shell32.Folder
            Dim mFolderItem As Object 'Shell32.FolderItem

            mShell 
= CreateObject("Shell.Application"' New Shell32.Shell '

            
'mFolder = mShell.NameSpace(mPath)
            '上语句用WScript解释或引用COM方式都能正常运行, 但后期绑定中返回的是Nothing
            '而直接用字符串值代替变量mPath又是能取得正确结果的
            '暂用下句代替
            mFolder = System.Runtime.CompilerServices.RuntimeHelpers.GetObjectValue(Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(mShell, Nothing"Namespace"New Object() {mPath}, NothingNothingNothing))

            mFolderItem 
= mFolder.ParseName(mFileName) '等效于mFolder.Items.Item(MFileName)

            
'可能的属性数。一般个数为13,查到扩展属性时是34,这里我加到256
            Dim mCount As Integer = &HFF

            
Dim mPropertyName As String
            
Dim mPropertyValue As Object

            
For i As Integer = 0 To mCount
                mPropertyName 
= mFolder.GetDetailsOf(Nothing, i) '取属性名称
                mPropertyValue = mFolder.GetDetailsOf(mFolderItem, i) '取属性值
                If Not mPropertyName = "" Then
                    mResult.Add(mPropertyName, mPropertyValue)
                
End If
            
Next


            mFolderItem 
= Nothing
            mFolder 
= Nothing
            System.Runtime.InteropServices.Marshal.ReleaseComObject(mShell)
            mShell 
= Nothing

            
Return mResult
        
End Function

    
End Class

End Namespace

测试,顺便也测试混合格式的处理:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        
Dim mCollection As ICollection = LzmTW.uIO.File.GetDetails("d:/lzmtw.dll")
        LzmTW.uCollection.MoveNext(mCollection, 
New Action(Of KeyValuePair(Of StringObject))(AddressOf Printer))
    
End Sub

    
Public Sub Printer(ByVal KeyValue As KeyValuePair(Of StringObject))
        
Static i As Integer
        
With KeyValue
            Console.WriteLine(LzmTW.uString.Format(
"{0,-14}:{1,-30}  第{2,2}项", .Key, .Value, i))
        
End With
        i 
+= 1
    
End Sub

其中MoveNext的代码:
    Public Shared Sub MoveNext(Of T)(ByVal enumerator As IEnumerator, ByVal action As Action(Of T))

        
While enumerator.MoveNext
            action.Invoke(
CType(enumerator.Current, T))
        
End While
    
End Sub

    
Public Shared Sub MoveNext(Of T)(ByVal collection As ICollection, ByVal action As Action(Of T))

        MoveNext(Of T)(collection.GetEnumerator, action)
    
End Sub

    
Public Shared Sub MoveNext(Of T)(ByVal enumerable As IEnumerable, ByVal action As Action(Of T))

        MoveNext(Of T)(enumerable.GetEnumerator, action)
    
End Sub

结果,要图片才行:

文件扩展属性

扩展属性EA,既以名称-值对形式将任意元数据与文件i 节点关联起来的技术 在shell中操作[root@bogon code]# setfattr -n user.x -v "this is fi...
  • qq_34829953
  • qq_34829953
  • 2017年05月29日 18:45
  • 401

Linux 文件系统扩展属性

扩展属性(xattrs)提供了一个机制用来将《键/值》对永久地关联到文件,让现有的文件系统得以支持在原始设计中未提供的功能。扩展属性是文件系统不可知论者,应用程序可以通过一个标准的接口来操纵他们,此接...
  • ganggexiongqi
  • ganggexiongqi
  • 2012年06月13日 21:38
  • 8741

mac下文件带有扩展属性的问题

在mac下开发的时候,经常会发现有些文件的属性后面,有个@符号 如上图所示。为什么呢? 在mac os 下 HFS+的文件系统里,有时候有些文件会附加上mac的专有属性,@属性就表示文...
  • mysteryhaohao
  • mysteryhaohao
  • 2016年07月13日 17:53
  • 766

在ASP.NET中获取文件属性

www.chinacs.net  2001-8-13  中文C#技术站 在ASP.NET中获取文件属性(Retrieving File Information In ASP.NET)By Steven...
  • 21aspnet
  • 21aspnet
  • 2004年10月27日 19:53
  • 2786

火狐扩展(Firefox Extension)FillForm开发手记(更新中)

FillForm是Firefox的一个扩展,根据名字可以看出来是填写表单,但是实际基本所有的表单元素都会处理的,这个扩展的功能就是可以保存和填写当前网页所有文本框、复选框、单选框的内容(input、t...
  • sysdzw
  • sysdzw
  • 2010年04月22日 01:09
  • 16935

扩展Activiti工作流任务和属性

用过activiti的朋友都知道,activiti做工作流用起来非常方便,可以很容易的基于activiti开发出一个基础的OA流程,可以有多种任务,事件,网关提供给大家选择,想了解详细的,可以点击下方...
  • makeryan
  • makeryan
  • 2017年08月09日 16:30
  • 329

文件系统的扩展属性:xattr命令

在 Mac OS X 下的 hfs+ 文件系统上,文件经常会被附加上 Mac 专有的扩展属性。比如 $ ls -l total 0 -rw-r--r--@ 1 daniel staff 0 16 ...
  • u010951938
  • u010951938
  • 2015年01月22日 22:25
  • 2399

Linux文件第二扩展文件系统属性

在通常情况下,linux下文件具有的属性都是读写和执行;但这些属性属于高层次的文件属性,它和具体的文件文件系统无关。在文件系统这一层,文件同样也具有很多属性,chattr和lsattr指令就是设置和查...
  • BabyFish13
  • BabyFish13
  • 2016年04月18日 20:47
  • 628

什么是扩展属性

今天在书上看到一个比较陌生的东西"扩展属性",看完以后明白,其实扩展属性就是给数据库对象添加说明注释文字的 ,比如说要解释一下某字段的含义是什么,可以给它加上中文说明用法如下:  EXEC sp_ad...
  • lee576
  • lee576
  • 2006年12月18日 22:13
  • 4021

iOS类别可以扩展类的属性

一般来说类目用于扩展类的方法,不可以扩展属性,但是通过runtime是可以实现类属性的扩展 /** button的name */ @property (nonatomic,copy) NSStrin...
  • hncsy403
  • hncsy403
  • 2016年11月20日 15:33
  • 675
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HOW TO:获取文件扩展属性
举报原因:
原因补充:

(最多只允许输入30个字)