我有一个允许拖放的图像管理器应用程序。当拖入图像时,我执行此行来获取图像的路径和名称。
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/