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
вместо этого, который возвращает последовательные результаты.