Если у меня следующая структура каталогов:
Проект1 / bin / debug
Project2 / xml / file.xml
Я пытаюсь сослаться на file.xml из каталога Project1 / bin / debug
По сути, я пытаюсь сделать следующее:
string path = Environment.CurrentDirectory + @"..\..\Project2\xml\File.xml":
каков правильный синтаксис для этого?





Использовать:
System.IO.Path.GetFullPath(@"..\..\Project2\xml\File.xml")
Вероятно, лучше манипулировать компонентами пути как компонентами пути, а не строками:
string path = System.IO.Path.Combine(Environment.CurrentDirectory,
@"..\..\..\Project2\xml\File.xml");
Достаточно верно. Я не считал ak's .. 's - решил, что это было из-за отсутствия начального "\", которое их убивало. Поправлюсь.
У меня тоже сработало.
string path = Path.Combine( Environment.CurrentDirectory,
@"..\..\..\Project2\xml\File.xml" );
Один ".." переносит вас в корзину
Следующее ".." перенесет вас в Project1.
Далее ".." приведет вас к родительскому элементу Project1.
Затем до файла
На самом деле я предпочитаю версию @lubos, но с правильным путем к файлу.
Обратите внимание, что использование Path.Combine () может не дать ожидаемого результата, например:
string path = System.IO.Path.Combine(@"c:\dir1\dir2",
@"..\..\Project2\xml\File.xml");
В результате получается следующая строка:
@"c:\dir1\dir2\dir3\..\..\Project2\xml\File.xml"
Если вы ожидаете, что путь будет "c: \ dir1 \ Project2 \ xml \ File.xml", вы можете использовать такой метод вместо Path.Combine ():
public static string CombinePaths(string rootPath, string relativePath)
{
DirectoryInfo dir = new DirectoryInfo(rootPath);
while (relativePath.StartsWith("..\\"))
{
dir = dir.Parent;
relativePath = relativePath.Substring(3);
}
return Path.Combine(dir.FullName, relativePath);
}
Но как насчет ".. \" не в начале relativePath? Это все еще действительный путь. Я бы предпочел использовать System.IO.Path.GetFullPath для преобразования относительных путей в абсолютные.
<продолжение /> или использование классов DirectoryInfo и FileInfo также может быть вариантом.
Это переводится как .. \ Project1 \ bin \ debug \ .. \ .. \ Project2 \ ... Если вы подумаете о ".." просто съесть предыдущий каталог в пути, вы получите .. \ Project1 \ Project2 \. ..