2013-03-08 1 views
1

Я использую чужой код (лицензированный) на двух разных машинах. На одной машине Application.ExecutablePath возвращает результат, который должен был ожидать программист, а с другой - нет. Обе машины Windows 7.Application.Executablepath в C# имеет смешанные символы разделителя

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