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

转: http://blog.csdn.net/knight94/archive/2006/05/07/711327.aspx

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;


namespace  ExcelToInfopath
{
    
/**//// <summary>
    
/// CFileInfo 的摘要说明。
    
/// </summary>

    public class CFileInfo
    
{
        
private string sFileName ="";
        
private string sFullFileName="";
        
private string sFileExtension="";
        
private string sFilePath = "";
        
private string sFileComment = "";
        
private string sFileAuthor = "";
        
private string sFileTitle = "";
        
private string sFileSubject = "";
        
private string sFileCategory = "";
        
private string sFileType = "";
        
private long lFileLength = 0;
        
private long lFileVersion = 0;
        
private DateTime dCreationDate;
        
private DateTime 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;               

                
"read File Details"#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 "属性"
        
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 "方法"
        
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
                    forint 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;
        }

    }

}


我是只取JPG图片的备注信息,所以:
  ShellClass sh = new ShellClass();
   Folder dir = sh.NameSpace(Path.GetDirectoryName(PictureFilepath));   
   FolderItem item = dir.ParseName( Path.GetFileName(PictureFilepath));
  string fileRemark = 
dir.GetDetailsOf(item,14);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值