Application.Executablepath в C# имеет смешанные символы-разделители

Я использую чужой код (лицензированный) на двух разных машинах. На одном компьютере 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 ответ

Я предполагаю, что путь, который вы упростили для C:\\Dir1\\Dir2\\Dir3/bin/debug на самом деле хэш (#) в имени Dir3.

Это причуда с Application.ExecutablePath по-видимому. Ты можешь использовать Assembly.GetEntryAssembly().Location вместо этого, который возвращает последовательные результаты.

Другие вопросы по тегам