2013-02-27 43 views
0

如果在Windows资源管理器中右键单击某个文件并选择属性,会弹出一个对话框,其中包含大量信息。我如何使用C#访问这些信息?如何从Windows的文件属性对话框的详细信息选项卡中获取信息?

具体而言,我正在查找详细信息选项卡上的信息。我主要使用图片,因此“拍摄日期”很重要。我也会和其他文件一起工作,所以有办法获得任何与文件相关的元数据是很好的。

我见过使用Shell32.dll获取这些信息的地方,但是当我尝试引用此库时遇到错误。有另一种方法可以做到这一点,也许通过P/Invoke?

+0

图像与普通文件不一样。尝试将图像加载到Image对象中,并查看它将为PropertyItems属性输出的内容。我相信它是一个字节数组的集合,因此您需要使用Encoding命名空间从它们获取字符串值。 – Justin 2013-02-27 21:33:31

回答

1

附近有一座小搞乱后,这里是如何得到的图像元数据非常有限的例子。

var image = System.Drawing.Image.FromFile(@"C:\your\image\here"); 

     foreach (var a in image.PropertyItems) 
     { 
      dynamic value; 

      switch (a.Type) 
       { 
       case 2: 
        value = Encoding.ASCII.GetString(a.Value); 
        break; 
       case 3: 
        value = BitConverter.ToInt16(a.Value, 0); 
        break; 
       case 4: 
        value = BitConverter.ToInt32(a.Value, 0); 
        break; 
       default: 
        value = "NaN"; 
        break; 
       } 

      Console.WriteLine("Type: {0} \r\n Value: {1}", a.Type, value); 
     } 

你可以找到一些Microsoft's site更多的信息和搜索的图像元数据规范自己完全写一个。

总是有使用已经处理这个问题的第三方库的选项,但我自己在图像领域没有做太多工作。

+0

谢谢@Justin。你知道是否有办法在其他类型的文件中访问类似的数据? – Tester101 2013-02-28 12:49:06

+0

没有一个适合的解决方案。就像图片元数据一样,所有文件都以不同的方式和格式存储他们的元数据。为了做到这一点,你必须找到你想要的文件的规范,并使用现有的库或制作自己的文件。 – Justin 2013-02-28 14:10:59

1
+0

是的。但它并没有给我我想要的信息。我正在测试的文件在资源管理器中的“常规”选项卡上显示“创建时间:1月 - 24 - 13日上午11:17:30”,但在“详细信息”选项卡上显示“2012/12/09 10:28 PM发生的日期” 。我想我必须稍微更新一下这个问题才能更清楚地说明问题。 – Tester101 2013-02-27 20:54:22

+0

其奇怪的:/可能是pproblem是别的东西或信息是不正确的。因为这些方法获取与文件相关的信息。 – Shaharyar 2013-02-27 21:17:28

+0

当您在代码中使用http://msdn.microsoft.com/en-us/library/system.io.filesysteminfo.creationtime.aspx时,它完全返回@ Tester101? – RandomUs1r 2013-02-28 16:31:35

1

可以使用File类方法用于此目的:

File.GetCreationTime(filename) 
File.GetLastWriteTime(filename) 
File.GetLastAccessTime(filename) 
//and many more in the intellisense 
+0

请参阅对上一个答案的评论以及更新后的问题。 – Tester101 2013-02-27 20:59:55

相关问题