c# - 拖放后图像名称元数据错误

标签 c# drag-and-drop metadata

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

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 ,所以它对于我的水平来说可能太高级了,但它工作得很好,我认为我足够了解它的用途,可以使用它。

但是,我在获取正确的图像标题时遇到问题。我怀疑“FileName”数据可能是原因,因为当拖动名为“Phare.jpg”的图像时,我得到的字符串是

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

“LIGHTH”位基本上是“phare”,但在英语中......至少是第一个字母。也许我没有提取正确的数据?有一个更好的方法吗?我可以尝试提取与“FileName”不同的数据吗?

最佳答案

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

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

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

关于c# - 拖放后图像名称元数据错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15416995/

相关文章:

C# Lambda 无法完成执行

c# - 使用 c# 和 sql 来滚动您自己的 wiki 有什么用?

iOS : Are there any mature libraries out there for drag\drop\rotate functionality - similar to dragkit

java - 自定义 TransferHandler 的 D&D 和 CCP 问题

jquery.validate、jquery.metadata 和 html5 数据

c# - LINQ 的 Cast 方法表现出意外

c# - 检查值是否已经在列表属性中

HTML5 拖放节点

java - 如何读取旧的word doc文件元数据

java - DatabaseMetaData#g​​etColumns 返回一个空的结果集