OpenFileDialog.DereferenceLinks 不工作
OpenFileDialog.DereferenceLinks not working
我想从它的快捷方式中获取 exe 的目标路径。这对于 DereferenceLinks 来说似乎很简单,但它不起作用。我什至尝试 Path.GetDirectoryName 并检查 DereferenceLinks 是否与 ShowDialog() 一起为真。
OpenFileDialog o = new OpenFileDialog();
o.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
o.Title = "Select the game's exe file or shortcut file";
o.Filter = "Executable or Shortcut (*.exe, *.lnk) | *.exe; *.lnk";
o.DereferenceLinks = true;
if ((bool)o.ShowDialog() && o.DereferenceLinks == true)
{
Debug.WriteLine("o.SafeFileName: " + o.SafeFileName);
Debug.WriteLine("o.FileName: " + o.FileName);
Debug.WriteLine("Path.GetDirectoryName(o.SafeFileName): " + Path.GetDirectoryName(o.SafeFileName));
Debug.WriteLine("Path.GetDirectoryName(o.FileName): " + Path.GetDirectoryName(o.FileName));
}
还不能 post 图片,所以这是在桌面上选择游戏快捷方式后的调试输出。游戏的exe文件不在桌面,文件名显然还在引用lnk文件。
- o.SafeFileName:Planescape - 折磨 - 增强Edition.lnk
- o.FileName: C:\Users\keeflomane\Desktop\Planescape - 折磨 - 强化 Edition.lnk
- Path.GetDirectoryName(o.SafeFileName):
- Path.GetDirectoryName(o.FileName): C:\Users\keeflomane\Desktop
我做错了什么?我是不是不明白 DereferenceLinks 的用途?
你没有取消引用文件名的原因是 *.lnk
文件有一个明确的过滤器。
因此,如果您从过滤器中删除 *.lnk
,您仍然会获得 exe 文件的快捷方式文件,并且 FileName
将 return 成为快捷方式文件的目标。
o.Filter = "Executable or Shortcut (*.exe, *.lnk) | *.exe";
我想从它的快捷方式中获取 exe 的目标路径。这对于 DereferenceLinks 来说似乎很简单,但它不起作用。我什至尝试 Path.GetDirectoryName 并检查 DereferenceLinks 是否与 ShowDialog() 一起为真。
OpenFileDialog o = new OpenFileDialog();
o.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
o.Title = "Select the game's exe file or shortcut file";
o.Filter = "Executable or Shortcut (*.exe, *.lnk) | *.exe; *.lnk";
o.DereferenceLinks = true;
if ((bool)o.ShowDialog() && o.DereferenceLinks == true)
{
Debug.WriteLine("o.SafeFileName: " + o.SafeFileName);
Debug.WriteLine("o.FileName: " + o.FileName);
Debug.WriteLine("Path.GetDirectoryName(o.SafeFileName): " + Path.GetDirectoryName(o.SafeFileName));
Debug.WriteLine("Path.GetDirectoryName(o.FileName): " + Path.GetDirectoryName(o.FileName));
}
还不能 post 图片,所以这是在桌面上选择游戏快捷方式后的调试输出。游戏的exe文件不在桌面,文件名显然还在引用lnk文件。
- o.SafeFileName:Planescape - 折磨 - 增强Edition.lnk
- o.FileName: C:\Users\keeflomane\Desktop\Planescape - 折磨 - 强化 Edition.lnk
- Path.GetDirectoryName(o.SafeFileName):
- Path.GetDirectoryName(o.FileName): C:\Users\keeflomane\Desktop
我做错了什么?我是不是不明白 DereferenceLinks 的用途?
你没有取消引用文件名的原因是 *.lnk
文件有一个明确的过滤器。
因此,如果您从过滤器中删除 *.lnk
,您仍然会获得 exe 文件的快捷方式文件,并且 FileName
将 return 成为快捷方式文件的目标。
o.Filter = "Executable or Shortcut (*.exe, *.lnk) | *.exe";