1

我在两台不同的机器上使用别人的代码(许可)。在一台机器上,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 路径的信息。为什么这段代码在不同的机器上会有不同的工作方式?

4

1 回答 1

1

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

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

于 2014-09-10T19:10:27.040 回答