使用Assembly.GetEntryAssembly()。位置来检测文件是否存在

时间:2017-11-13 16:03:06

标签: c# wpf xaml

我正在尝试检测给定文件是否存在。例如,假设我在这个目录中寻找Joystick.png:F:\ FrontEnd \ Themes \ Custom \ Images \ Platform \ Controller \ Joystick.png

我无法对目录结构进行硬编码,因为应用程序可能安装在别处。然而,目录结构不会改变。

我一直在使用这个

string path = $"pack://siteoforigin:,,,/Themes/Custom/Images/Controls/{game.Platform}/{controller}.png";

将路径发送到wpf上的图像但是我已经开始倾斜,我无法将同一个变量传递给File.Exists。所以我不得不想出一个替代方案。

我发现了这个:

string exists = Assembly.GetEntryAssembly().Location;

它得到了我的结果:F:\ FrontEnd \ FrontEnd.exe

所以我的问题是,如何修改var exists以便与var path的结构相匹配?

2 个答案:

答案 0 :(得分:1)

您可以使用System.IO.Path的不同成员来操纵路径字符串。

var exePath = @"F:\FrontEnd\FrontEnd.exe";
var filePath = @"/Themes/Custom/Images/Controls/{game.Platform}/{controller}.png";
var relPath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(exePath),filePath);
var packPath = @"pack://siteoforigin:,,," + relPath;

答案 1 :(得分:0)

试试这个

  var path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);

  var pathtoCombine = Path.Combine(path, "themes\\custom\\images\\controls\\pc");

  var image = Path.Combine(pathtoCombine, "image.txt");
  var exists = File.Exists(image);

您可以将"themes\\custom\\images\\controls\\pc"更改为$"themes\\custom\\images\\controls\\{platform}\\{imagename}"

这给出了程序集的根目录。例如

  

c:\ users \\ documents \ visual studio 2015 \ Projects \ StringSandbox \ StringSandbox \ bin \ Debug