2013-03-14 31 views
2

我有一个图像管理器应用程序,允许拖放。当拖入图像时,我执行这一行来获取图像的路径和名称。拖放后图像名称元数据有误

public bool GetFileName(out string _filename, DrageventArgs E) 
{ 
    _filename = String.Empty; 
    Array data = ((System.Windows.Forms.IDataObject)e.Data).GetData("FileName") as Array; 
    ... 
} 

该生产线是从This article拍摄,所以它可能是我水平太先进,但它的工作非常好,我想我的理解不够好,它的所作所为使用它。

但是,我遇到的问题得到正确的图像标题。我怀疑“文件名”的数据可能是原因,因为拖称为“Phare.jpg”的形象,我得到的字符串时是

"C:\Users\\Public\Pictures\SAMPLE~1\LIGHTH~1.JPG". 

的“LIGHTH”位基本上是“灯塔”,但在英语......至少是第一个字母。也许我没有拉取正确的数据?有一个更好的方法吗?有没有比我能够尝试拔出的“FileName”更多的数据?

回答

2

这是从正常文件名构建的8.3 file name。很可能无论用什么软件来显示文件名称都使用一些有趣的文件名映射来显示名称,或者非8.3名称完全不同于8.3名称是您的情况(在命令提示符下执行dir C:\Users\\Public\Pictures\SAMPLE~1可能会显示实际文件名是什么) 。

您应该能够将8.3文件名映射回到常规名称System.IO.Path.GetFullPath()

您有机会从图像元数据中获得其他语言的图像名称 - 检查出Image.PropertyItems

+1

没错。您可能想提及System.IO.Path.GetFullPath()将短名称转换为长名称。 – 2013-03-14 18:22:53

+0

在命令提示符下输入'dir C:\ Users \\ Public \ Pictures \ SAMPLE〜1'时,我得到全名,但它仍然是英文的。我猜这是嵌入在图像中的名称,而不是出现在Windows资源管理器中的名称。 – Felix 2013-03-14 18:34:04

+0

@HansPassant,谢谢 - 在答案中内联。还添加了可能有用的调用来获取属性。 – 2013-03-14 18:45:05