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

来源:互联网 发布:陈意涵angelababy知乎 编辑:程序博客网 时间:2024/05/23 00:05

 

在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;
        }
    }
 
 
原创粉丝点击