在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
为了方便大家使用,我把其中类的代码贴出来。
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"
}
else
{
throw new Exception("The given File does not exist");
}
}
"属性"
"方法"
}
// 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);