C#中的Application.Executablepath具有混合的分隔符

时间:2013-03-08 14:49:13

标签: unc path-separator executable-path

我在两台不同的机器上使用别人的代码(许可)。在一台机器上,Application.ExecutablePath返回程序员必须预期的结果,而另一台机器则没有。两者都是Windows 7机器。

在我的机器上,Application.ExecutablePath返回类似于:

的内容
"C:\\Dir1\\Dir2\\Dir3/bin/Debug/APP.EXE"

在另一台机器上,它返回

"C:\\Dir1\\Dir2\\Dir3\\bin/Debug/APP.EXE"

程序员显然期望第二个返回字符串,因为代码执行此操作:

  string path = Application.ExecutablePath;
  short found = (short)path.LastIndexOf(@"\");

  if (found > -1)
  {
    path = path.Substring(0, found);
  }
  try
  {
    foreach (string File in Directory.GetFiles(path + @"\Res\Patterns\", "*.xml"))
    {
      found = (short)File.LastIndexOf(@"\");
      if (found > -1)
        //... use files found

并且文件目录存在于Dir3下的两台机器中,因此可以在另一台机器上找到,但不在我的机器上。我无法找到有关Windows决定何时何地返回正斜杠(如URL路径)与使用“\”返回UNC路径的任何信息。为什么这些代码在不同的机器上的工作方式不同?

1 个答案:

答案 0 :(得分:1)

我猜你简化为C:\\Dir1\\Dir2\\Dir3/bin/debug的路径实际上在Dir3名称中有一个哈希(#)。

这显然是Application.ExecutablePath的怪癖。您可以使用Assembly.GetEntryAssembly().Location代替,这会返回一致的结果。