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

C#能否编程获得博图程序中某个数据块特定变量的交叉引用信息,或者打开这个变量的cross reference窗口? 🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀! 阅读详情
 

在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/csharp/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;

        }

    }

 



Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=711327

[ 点击此处收藏本文]   发表于 2006年05月07日 09:00:00
href="http://blog.youkuaiyun.com/Knight94/Services/Pingback.aspx" rel="pingback" />
NX二次开发(C#)专栏目录 用C#语言做NX二次开发专栏目录 阅读详情

相关推荐

C# 使用ShellClass获取mp3语音时长

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

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

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

愚翁专栏 2万+

OctoMag: An Electromagnetic System for 5-DOF Wireless Micromanipulation

电磁线圈组驱动经典系统,可以作为参考。 OctoMag: 用于5自由度无线微操作的一个电磁铁系统 OctoMag: An Electromagnetic System for 5-DOF Wireless Micromanipulation [1] Paper Link Authors: J. J. Abbott, etc. 2010, TRO IEEE Transactions on Robot...

XU Yangxin的博客 1665

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万+

Temporal Anti-Aliasing(时域抗锯齿TAA)

首先说一下走样:一般分为时域走样(如旋转车轮)和空域走样(锯齿),但在 TAA 技术是采用时域相关叠加混合技术来解决空域走样的问题。 简单看一下空域抗锯齿 (Spatial Anti-Aliasing, SAA)相关技术,最普及的莫过于 MSAA,被各大渲染引擎采用,但是 MSAA 并不适用于延迟渲染 (Deferred Rendering),随之出现了很多基于形态学的后处理抗锯齿技术,如 MLAA,FXAA,SMAA 等(具体看参见图形_反走样技术总结相关介绍),虽然他们表现良好且支持延迟渲染,但是都会面

qq_35312463的博客 1万+

ros2 gazebo仿真阿克曼小车搭载livox mid360雷达流程

流程简介:仿真环境的搭建需要安装ROS2和Gazebo。使用的是Humble版本,需要确认是否已经正确安装。然后是阿克曼小车模型的URDF,需要包括底盘、转向机构、驱动轮等,需要参考现有的阿克曼模型,比如ClearPath的Husky,但需要调整参数。Livox Mid360雷达在Gazebo中的仿真可能没有现成的插件,需要使用通用3D LiDAR插件来模拟。IMU的仿真相对简单,但需要注意噪声模型,以接近真实数据。

weixin_43802726的博客 3210

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

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

故事不长丨的博客 6988

【C++】 详解 lower_bound 和 upper_bound 函数(看不懂来捶我!!!)

这两个函数是我在 LeetCode 上做题见到,看到不熟悉的函数 lower_bound 和 upper_bound让我感觉很难受,于是在C++ 官网去学习,例子就一个是最基础的,我看明白了。虽然是两个函数的接口就两个,但是有时候看别人使用的时候,里面参数还可以放不同的仿函数,我懵逼了。就去网上搜,但是大家讲解的都是它的第一个接口。我只能再把文档一遍一遍过,代码一遍遍的尝试,调试。最终通过查阅资料将其总结如下。

weixin_45031801的博客 9万+

C#语法细节

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

tc9527mt的博客 1002

Qt 5.15.2静态编译避坑实录:MinGW 32位版从源码到Creator配置的全流程踩坑总结

本文详细介绍了Qt 5.15.2 MinGW 32位版本的静态编译全流程,包括环境准备、配置参数优化、编译过程监控及安装后配置。重点解决了静态编译中的常见问题,如参数顺序敏感、路径引号问题等,并提供了性能对比实测数据,帮助开发者高效完成静态编译。

weixin_26749245的博客 271

【maven】idea左侧External Libraries里,没有Maven的依赖包 代码飘红

文章目录1.概述M.参考 1.概述 因为内网开发,然后这几天我被隔离了,然后公司搞了一个外网的vpn能连接的云桌面,云桌面也是网络隔离的,因此只能自己拷贝相关的文件到里面。 然后我就拷贝了代码和maven仓库中的一部分,因为本地的20G一次拷贝不完,需要多次拷贝,但是我拷贝了kafka,仍然飘红。具体如下 idea左侧External Libraries里,没有Maven的依赖包 然后整了很久都没搞定,后来我自己新建了一个项目,然后引入发现是不可以的,而且框框里面的飘红。 然后我就想是不是因为缺少依赖

九师兄 4411

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

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

t15032286291的博客 2473

AndroidKiller之APK 编译失败,无法继续下一步签名【BUG解决】【App反向解析】

文章目录项目场景:问题描述原因分析:解决方案:BUG解决 项目场景: AndroidKiller: 在反向解析APP包时报错:APK 编译失败,无法继续下一步签名。 网上很多方法都是无效的哈,我追究原因发现,这个bug的出现大部分情况都是因为Apktool的问题。 此方法:百分之百解决此bug! 错误如下: 问题描述 APK 编译失败,无法继续下一步签名! 原因分析: Apktool版本不适配的问题,现在的技术更新换代太快,我们安装AndroidKiller的时候,有时候不是官方渠道的话,他的版本是非常

一键难忘的博客 2万+

[愚翁专栏]如何对系统中的某个进程进行监控

最近看到一篇文章,就是如何对系统某个进程进行监控,并且当这个进程触发某些事件的时候,能进行相应。而且发现有人问这方面的问题,我就大致在其原有的基础进行如下的修改。 首先说明的一点,方法是基于WMI的。以下是我扩展类的代码说明://------------------------ProcessInfo Class------------------------------------

一路采撷 1396

Ubuntu 系统下安装 OpenClaw(原 Clawdbot)的详细指南

Ubuntu 系统下安装 OpenClaw(原 Clawdbot)的详细指南

Science prince的博客 3535

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C#底层库--StringExtension字符串扩展类

StringExtension字符串扩展类,用于给字符串两边添加单引号、给字符串两边添加括号、使用And连接两个SQL条件、去掉末尾字符、字符串加指定字符包含、字符串比较、判断字符串是否为空、向右补充字符串长度、向左补充字符串长度、按指定间隔符,连接字符串、按指定间隔符,连接字符串、字符串拆分成list、按指定分割符,字符串拆分成list、截取中间字符串、删除最后结尾的逗号、删除最后结尾指定字符、首字母大写、驼峰命名法(第一个单字以小写字母+第二个单字大写首字母)等。

花北城的博客 1572

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

DotNetGuide专栏C#/.NET/.NET Core学习路线集合,学习不迷路!

C#、.NET、.NET Core、WPF、WinForm、MAUI、Avalonia、Unity等相关技术的学习、工作路线集合(持续更新)!!!C#/.NET/.NET Core学习路线集合语雀访问地址:https://www.yuque.com/ysgstudyhard/lg56l0/ub8s6b0re9h26eprDotNetGuide技术社区微信交流8群:欢迎加入DotNetGuide技术社区微信交流8群!DotNetGuide是一个专注于C#/.NET/.NET Core学习、工作、面试指南的Gi

专注于C#/.NET/.NET Core学习、工作、面试干货和实战教程分享。这里聚焦了大量的C#/.NET/.NET Core优质文章、开源项目、实用工具和学习、工作、面试心得。 1715

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

初级代码游戏的专栏介绍与文章目录

专栏介绍与文章目录

编程之道在明明德在亲民在止于至善 3942

[C# SDK/IDE]-VSCode 搭建 C# 开发环境

获取安装 Visual Studio Code 汉化及插件配置 官网下载安装.NET Code SDK 初识 .NET SDK 的一些命令 基本 C# 程序编译和运行 命令行单独利用 SDK 命令初始化工作空间并编译运行 C# 程序 在 VSCode 中搭配 SDK 编译运行 C# 程序 安装配置 Code Runner 插件更方便地编译运行 以及本节资源下载...............

燃吹 U 客帮 2万+

VSIX:C#项目 重命名所有标识符(Visual Studio扩展开发)

VSIX:C#项目 重命名所有标识符(Visual Studio扩展开发)

编程之道在明明德在亲民在止于至善 2466

Python3 与 C# 扩展之~模块专栏

代码裤子:https://github.com/lotapp/BaseCode/tree/maste 在线编程:https://mybinder.org/v2/gh/lotapp/BaseCode/master 在线预览:http://github.lesschina.com/python/base/module/模块专题.html 老师休假度蜜月去了,这学期也到...

LP890127的博客 380

【C#与Redis】--介绍

C# 与 Redis》是一个专注于帮助具有 C#开发经验的程序员深入了解和掌握 Redis 数据库的专栏。Redis 是一种高性能、开源的内存数据库,常用于缓存、会话存储、排行榜等应用场景。在这个专栏中,我将从 Redis 的基础知识入手,逐步介绍 Redis 的数据结构、命令、C#操作 Redis 等内容。通过实际案例,我将展示如何将 Redis 应用于实际的开发项目中,帮助读者更好地理解和应用 Redis。

喵叔 1610

【C#深度学习之路】如何使用C#读取safetensors扩展名的大模型文件

C#读取Safetensors文件并不算困难。只是因为使用C#搞深度学习的人并不多,相关功能实现并不普及。撰写本文是希望能够帮助更多喜欢使用C#开发深度学习项目的爱好者更容易实现自己的项目。

qq_30270773的博客 2721

【C#底层库】数值扩展(将小数值按指定的小数位数舍入)

本文为C#底层库系列合集,涵盖进制转换、字符串扩展、数据库操作、ORM构建、配置读写、文件处理、正则、日志、排序算法、加密解密、HTTP通信等高频功能,致力于打造企业级通用组件库。所有工具类均经过封装与测试,支持一键调用,提升开发效率,拒绝重复造轮子。

花北城的博客 1197

VSIX:C#项目 重命名所有标识符(Visual Studio扩展开发)代码详解

VSIX:C#项目 重命名所有标识符(Visual Studio扩展开发)代码详解

编程之道在明明德在亲民在止于至善 1972

C#/Winform入门、进阶、强化、扩展、知识体系完善等知识点学习、性能优化、源码分析专栏分享...

场景作为一名C#的Winform开发者,势必经历过从入门到自学、从基础到进阶、从学习到强化的过程。当经历过几年企业级开发的磨炼,再回头看之前的开发过程、成长阶段发现确实是走了好多的弯路。作为一名终身学习的信奉者,秉承Java体系需持续学习、持续优化的信念。不惜耗费无数个日日夜夜,耗费大量时间精力将开发过程中所用到的Winf...

weixin_40346807的博客 173
上一篇: [愚翁专栏]如何把网络共享目录映射为本地驱动器(续)
下一篇: [wy231的专栏]关于C#多屏幕显示器编程
MaybeHelios
博客等级 码龄21年 65粉丝 79原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值