如何用C#获得文件信息以及扩展信息

C# 使用ShellClass获取mp3语音时长 C# 使用ShellClass获取mp3语音时长 相关代码请参考: http://www.mikeblog.cn/article/details/186 立即下载

在C#中获得文件信息很容易,只需要用FileInfo类或者FileVersionInfo类就可以获得,但是如果想要获得文件的扩展信息,则无法从这两类来获得。不过在C#中,这也不是件难事,只要引入“Microsoft Shell Controls and Automation”这个COM就可以获得。

 

接下来就分别来介绍。

首先介绍FileInfo类,这个类非常简单,首先需要根据文件名来创建FileInfo对象,例如:

using System.IO;

FileInfo fi = new FileInfo( yourFileName );

 

那么以后就可以通过此对象来访问文件一些属性,例如文件大小,创建时间,最后访问时间,最后写入时间等等,还可以通过访问对象的Attributes属性,来获得当前文件是只读、隐藏之类属性,这里我就不细说了,详情参看MSDN。

 

第二个要说的,就是FileSystemInfo类,这个类是FileInfo类的基类,这里也就不多说了。

 

第三个要说的,就是如何判断一个文件的Version信息,这就需要来介绍FileVersionInfo这个类。但是并不是所有的文件都有Version信息,因此在使用FileVersionInfo的时候需要注意的是,最好先判断一下文件的扩展名。不过一个FileVersionInfo类对象不能通过构造函数来创建,需要调用类的静态方法来获得,例如:

using System.Diagnostics;

FileVersionInfo fvi = FileVersionInfo.GetVersionInfo( yourFileName );

 

通过此对象,可以获得文件的产品名称,公司名,版本号,语言版本,版权等等,这方面详情可以参看MSDN。

 

最后要说的,就是如何得到一个文件的扩展信息,例如标题,作者等等,这些信息从如上三个类中是无法获得。但是要在C#程序中获得,就需要引入一个“Microsoft Shell Controls and Automation”这个COM,这个COM是由系统“Shell32.dll”而提供。这方面的例子,可以参看如下这篇文章。

http://www.codeproject.com/cs/files/detailedfileinfo.asp

 

为了方便大家使用,我把其中类的代码贴出来。

using Shell32; // Use this namespace after add the reference

    /// <summary>

    /// Returns the detailed Information of a given file.

    /// </summary>

    public class CFileInfo

    {

 

        private string sFileName ="",

            sFullFileName="",

            sFileExtension="",

            sFilePath = "",

            sFileComment = "",

            sFileAuthor = "",

            sFileTitle = "",

            sFileSubject = "",

            sFileCategory = "",

            sFileType = "";

 

        private long lFileLength = 0,

            lFileVersion = 0;

 

        private DateTime dCreationDate,

            dModificationDate;

 

        public CFileInfo(string sFPath)

        {

           

            // check if the given File exists

            if(File.Exists(sFPath))

            {

                ArrayList aDetailedInfo = new ArrayList();

 

                FileInfo oFInfo = new FileInfo(sFPath);

 

                sFileName = oFInfo.Name;

                sFullFileName = oFInfo.FullName;

                sFileExtension = oFInfo.Extension;

                lFileLength=oFInfo.Length;

                sFilePath = oFInfo.Directory.ToString();

                dCreationDate = oFInfo.CreationTime;

                dModificationDate = oFInfo.LastWriteTime;

               

                #region "read File Details"

               

                aDetailedInfo = GetDetailedFileInfo(sFPath);

 

                foreach(DetailedFileInfo oDFI in aDetailedInfo)

                {

                    switch(oDFI.ID)

                    {

                        case 2:

                            sFileType = oDFI.Value;

                            break;

                        case 9:

                            sFileAuthor = oDFI.Value;

                            break;

                        case 10:

                            sFileTitle = oDFI.Value;

                            break;

                        case 11:

                            sFileSubject = oDFI.Value;

                            break;

                        case 12:

                            sFileCategory = oDFI.Value;

                            break;

                        case 14:

                            sFileComment = oDFI.Value;

                            break;

                        default:

                            break;

                    }

 

                }

                #endregion

            }

            else

            {

                throw new Exception("The given File does not exist");

            }

 

        }

 

 

        #region "Properties"

        public string FileName

        {

            get{return sFileName;}

            set{sFileName=value;}

        }

 

        public string FilePath

        {

            get{return sFilePath;}

            set{sFilePath = value;}

        }

 

        public string FullFileName

        {

            get{return sFullFileName;}

            set{sFullFileName=value;}

        }

 

        public string FileExtension

        {

            get{return sFileExtension;}

            set{sFileExtension=value;}

        }

 

   

        public long FileSize

        {

            get{return lFileLength;}

            set{lFileLength=value;}

        }

 

        public long FileVersion

        {

            get{return lFileVersion;}

            set{lFileVersion=value;}

        }

 

        public DateTime FileCreationDate

        {

            get{return dCreationDate;}

            set{dCreationDate=value;}

        }

 

        public DateTime FileModificationDate

        {

            get{return dModificationDate;}

            set{dModificationDate=value;}

        }

       

        public string FileType

        {

            get{return sFileType;}

        }

 

 

        public string FileTitle

        {

            get{return sFileTitle;}

        }

 

        public string FileSubject

        {

            get{return sFileSubject ;}

        }

 

        public string FileAuthor

        {

            get{return sFileAuthor ;}

        }

 

        public string FileCategory

        {

            get{return sFileCategory ;}

        }

 

        public string FileComment

        {

            get{return sFileComment ;}

        }

 

 

        #endregion

 

        #region "Methods"

        private ArrayList GetDetailedFileInfo(string sFile)

        {

            ArrayList aReturn = new ArrayList();

            if(sFile.Length>0)

            {

                try

                {

 

                    // Creating a ShellClass Object from the Shell32

                    ShellClass sh = new ShellClass();

                    // Creating a Folder Object from Folder that inculdes the File

                    Folder dir = sh.NameSpace( Path.GetDirectoryName( sFile ) );

                    // Creating a new FolderItem from Folder that includes the File

                    FolderItem item = dir.ParseName( Path.GetFileName( sFile ) );

                    // loop throw the Folder Items

                    for( int i = 0; i < 30; i++ )

                    {

                        // read the current detail Info from the FolderItem Object

                        //(Retrieves details about an item in a folder. For example, its size, type, or the time of its last modification.)

                        // some examples:

                        // 0 Retrieves the name of the item.

                        // 1 Retrieves the size of the item.

                        // 2 Retrieves the type of the item.

                        // 3 Retrieves the date and time that the item was last modified.

                        // 4 Retrieves the attributes of the item.

                        // -1 Retrieves the info tip information for the item.

 

                        string det = dir.GetDetailsOf( item, i );

                        // Create a helper Object for holding the current Information

                        // an put it into a ArrayList

                        DetailedFileInfo oFileInfo = new DetailedFileInfo(i,det);

                        aReturn.Add(oFileInfo);

                    }

 

                }

                catch(Exception)

                {

 

                }

            }

            return aReturn;

        }

        #endregion

    }

 

    // Helper Class from holding the detailed File Informations

    // of the System

    public class DetailedFileInfo

    {

        int iID = 0;

        string sValue ="";

 

        public int ID

        {

            get{return iID;}

            set

            {

                iID=value;

            }

        }

        public string Value

        {

            get{return sValue;}

            set{sValue = value;}

        }

 

        public DetailedFileInfo(int ID, string Value)

        {

            iID = ID;

            sValue = Value;

        }

    }

 

携程登录风控逆向踩坑实录:从滑块到点选验证码,我是如何一步步拿到phantom-token的 本文详细解析了携程登录风控系统的逆向过程,从滑块验证码到点选验证码的破解,再到设备指纹生成和加密协议逆向,最终成功获取phantom-token。文章提供了关键代码示例和实战技巧,帮助开发者理解并绕过复杂的风控机制。 阅读详情

相关推荐

Adams中AKISPL和DX函数的妙用:打造精准的非线性衬套模型

本文深入探讨了在Adams动力学软件中,如何巧妙运用AKISPL插值函数与DX等位移测量函数,构建高精度的非线性衬套模型。文章通过实战案例,详细解析了从单轴非线性刚度到完整六自由度耦合模型的实现步骤与调试技巧,帮助工程师将复杂的实验或有限元数据转化为可靠的多体动力学仿真模型,有效提升系统仿真置信度。

sky77的博客 317

C#中FileInfo类操作文件实例

<br />FileInfo类提供方便很多方法类似于File类的方法,但File类是静态类,而FileInfo类是普通类,没有静态方法,必须通过实例化来调用方法。<br />using System;<br />using System.IO;<br />class Program<br />{<br />static void Main(string[]args)<br />{<br />   string filepath = @"f:/test/fileinfo.txt";<br />   FileI

small5e4444的专栏 1万+

保姆级教程:在PyCharm里用Continue插件一键接入DeepSeek API(含乱码修复)

本文详细介绍了如何在PyCharm中通过Continue插件无缝集成DeepSeek API,提供从环境准备到高级配置的全流程指南,包括解决常见的乱码问题。通过本教程,开发者可以轻松实现AI编程助手的高效调用,提升代码编写和调试效率。

weixin_30275415的博客 850

C# FileInfo类的使用方法及常用操作(附代码示例)

FileInfo类是位于System.IO命名空间中的一个类,它提供了一系列用于操纵文件的属性和方法。通过FileInfo类,我们可以轻松获取有关文件的信息,如文件大小、创建日期、修改日期等。此外,FileInfo类还提供了一些便捷的方法,来进行文件复制、移动、删除等操作。创建FileInfo对象获取文件属性信息文件操作:复制、移动和删除文件判断文件是否存在FileInfo类为C#编程中的文件操作提供了强大的功能。通过灵活运用FileInfo类的方法和属性,我们可以轻松地管理和操作文件。

故事不长丨的博客 6988

Ubuntu22.04+PX4+Gazebo:从零到一构建无人机仿真开发环境

本文详细介绍了在Ubuntu22.04系统下搭建PX4+Gazebo无人机仿真开发环境的完整流程。从基础环境配置、PX4固件安装到Gazebo仿真环境搭建,提供了实用命令和常见问题解决方案,帮助开发者快速构建高效的无人机开发环境。

weixin_29243279的博客 434

保姆级教程:在RK3588开发板上用MPP库实现H.264硬编码(附完整代码)

本文详细介绍了在RK3588开发板上使用MPP库实现H.264硬编码的全流程,包括环境准备、MPP库编译、编码器初始化与配置、数据输入与编码流程以及高级性能优化技巧。通过实战案例和完整代码,帮助开发者充分利用RK3588的VPU硬件加速能力,提升视频编码效率和质量。

weixin_28716769的博客 414

C#语法细节

这意味着,即使同个类的不同对象,它们的成员变量可以有不同的值,反映了每个对象独特的状态。简而言之,`public` 成员是完全公开的,`protected` 成员在类及其派生类内部可见,而 `private` 成员仅在定义它们的类内部可用。:静态变量在C#中的作用域是整个类级别,这意味着一旦在类中定义了一个静态变量,它就可以在该类的任何成员方法或属性中被访问,不论这些成员是静态的还是非静态的。- 若数据是类级别的共享资源,或作为工具方法的一部分(如帮助类中的工具函数),静态变量则是更合适的选择。

tc9527mt的博客 1002

告别Qt Creator!VSCode + QMake + MinGW:从零搭建高效Qt开发环境

本文详细介绍了如何使用VSCode替代Qt Creator搭建高效的Qt开发环境,涵盖VSCode配置、QMake与MinGW集成、智能提示优化及构建调试技巧。通过实战案例展示如何提升开发效率30%以上,特别适合中大型Qt项目开发。

weixin_30466039的博客 243

C#获取文件信息的方法汇总

无论是使用FileInfo类、File类、Directory类还是Path类,C#提供了多种获取文件信息的方法,可以根据具体需求选择合适的方法来获取文件的属性、大小、时间等信息。更多信息大家可以参考官网。希望本文对你在C#文件处理中有所帮助,欢迎留言或者吐槽。

t15032286291的博客 2473

【Qt笔记】1.VSCode搭建Qt运行环境

Qt6之后已经抛弃qmake,使用cmake。cmake相对qmake来说只有优点没有缺点。使用VSCode搭建完Qt的运行环境就能开开心心debug了.vscode需要使用的插件:2.Qt tools3.CMakec++插件可以不关注,缺啥都会提醒你.正常安装即可。

没有手牌的博客 2万+

Python - 多页pdf 合称为一页

尝试使用 ReportLab 来重画 pdf,但探索起来有点麻烦。重要的是解决手头这个问题,所以就算方法蠢,但简单完事。以下生成结果,最有一页 pdf 可能会显示在第一页,手动编辑下 pdf 即可;或者你也可以修改代码逻辑来完善。打印ppt,一页占用A4纸比较浪费,想多页合成一个 A4大小;安装 fitz,单独安装 fitz 使用可能会报错。将 PDF 拆分为 图片来保存。

AI工程化、开源分享、文档翻译、代码笔记 1425

C#获取文件基本信息,文件名称、修改时间、文件路径等

在此示例中,我们使用微软官方的Interop.Excel库以编程方式打开Excel文件,填充数据并将其保存到用户文档文件夹中。第10-16行,我们使用foreach循环遍历files数组,并将每个FileInfo对象的文件名,修改日期和路径添加到dtFiles对象中的新行。8.一旦完成循环,我们现在拥有一个包含所有文件信息的DataTable对象,我们可以将其导出到Excel或其他应用程序。6.创建一个DataTable对象,以便我们可以将文件信息添加到其中,并最终导出到Excel或其他应用程序。

naer_chongya的博客 4291

XDMA Scatter-Gather(SG)模式

XDMA Scatter-Gather(SG)模式 是 Xilinx FPGA 中用于高效处理 ​非连续内存数据 的 DMA 传输机制,通过 ​描述符链表(Descriptor List)​ 管理多块分散数据,显著减少 CPU 开销并提升吞吐量。

浩瀚之水的专栏 2130

[转载]如何用C#获得文件信息以及扩展信息

如何用C#获得文件信息以及扩展信息如何用C#获得文件信息以及扩展信息 在C#中获得文件信息很容易,只需要用FileInfo类或者FileVersionInfo类就可以获得,但是如果想要获得文件的扩展信息,则无法从这两...

congji3817的博客 241

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

用C#获得文件信息以及扩展信息[转]

在C#中获得文件信息很容易,只需要用FileInfo类或者FileVersionInfo类就可以获得,但是如果想要获得文件的扩展信息,则无法从这两类来获得。不过在C#中,这也不是件难事,只要引入“Microsoft Shell Controls and Automation”这个COM就可以获得。 接下来就分别来介绍。 首先介绍FileInfo类,这个类非常简单,首先需要根据文...

djww42001的博客 117

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[愚翁专栏]如何用C#获得文件信息以及扩展信息

function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(keyit=window.open(http://www.365key.com/storeit.as

一路采撷 1726
上一篇: 如何解决WebService参数传递中文的问题
下一篇: 浅谈八皇后问题
Knight94
博客等级 码龄25年 1013粉丝 87原创
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值