C#中获取文件属性

本文介绍了如何在C#中获取文件的详细属性,包括添加对shell32.dll的引用,通过属性名或下标获取属性值。讨论了不同Windows版本中属性下标的不一致性和跨语言兼容性问题,并提出了解决方案。

在Explorer中,选择“详细”视图,可以看到很多文件属性,如图片的分辨率,MP3的艺术家、比特率,视频文件的分辨率等等等等;这些数据,有时候在C#中可能很难获取,比如图片的分辨率,需要用Image.FromFile得到Image类,然后才能得到分辨率数据,但是把图片加载到内存中,一是会加大内存开销,二是会更耗时。所以,今天我们就来说说怎么在C#中获取到文件的详细属性。

添加引用

在你的项目中添加对C:\Windows\System32\shell32.dll的引用,我们在前面一期《C#中使用SHFileOperation调用Windows的复制文件对话框》中也用到了这个动态链接库,不过当时是使用映射的方式,如今我们将其引用,直接使用。

using Shell32;

代码实现

        /// <summary>

        /// 获取文件属性字典

        /// </summary>

        /// <param name="filePath">文件路径</param>

        /// <returns>属性字典</returns>

        public static Dictionary<string, string> GetProperties(string filePath)

        {

            if (!File.Exists(filePath))

            {

                throw new FileNotFoundException("指定的文件不存在。", filePath);

            }

            //初始化Shell接口 

            Shell32.Shell shell = new Shell32.ShellClass();

            //获取文件所在父目录对象 

            Folder folder = shell.NameSpace(Path.GetDirectoryName(filePath));

            //获取文件对应的FolderItem对象 

            FolderItem item = folder.ParseName(Path.GetFileName(filePath));

            //字典存放属性名和属性值的键值关系对 

            Dictionary<string, string> Properties = new Dictionary<string, string>();

            int i = 0;

            while (true)

            {

                //获取属性名称 

                string key = folder.GetDetailsOf(null, i);

                if (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值