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

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;

        }

    }

 

posted @ 2008-05-29 05:33  winnerlan  阅读(662)  评论(0编辑  收藏  举报