Путь. Комбинация и точечная нотация
Я ищу что-то похожее на метод Path.Combine
, который поможет мне правильно объединить абсолютные и относительные пути. Например, я хочу
Path.Combine(@"c:\alpha\beta", @"..\gamma");
чтобы получить c:\alpha\gamma
вместо c:\alpha\..\gamma
как Path.Combine
. Есть ли простой способ сделать это? Излишне говорить, что я также хочу, чтобы путь .
path или несколько путей ..
(например, ..\..\
) работал правильно.
Ответы
Ответ 1
Используйте Path.GetFullPath
string path = Path.Combine(@"c:\alpha\beta", @"..\gamma");
Console.WriteLine(Path.GetFullPath(path));
или DirectoryInfo
класс:
string path = Path.Combine(@"c:\alpha\beta", @"..\gamma");
DirectoryInfo info = new DirectoryInfo(path);
Console.WriteLine(info.FullName);
Оба выводят:
c:\alpha\gamma
Ответ 2
Возможно, вы можете сделать Path.Combine, за которым следует Path.GetFullPath.
Ответ 3
вы можете использовать комбинацию из двух вызовов:
string path = Path.Combine(@"c:\alpha\beta", @"..\gamma");
string result = Path.GetFullPath(path);
И это должно дать вам результаты, которые вы ищете.
Ответ 4
Вы можете вызвать Path.GetFullPath, чтобы решить эту проблему.
Например, этот код:
string path = Path.Combine(@"c:\alpha\beta", @"..\gamma");
Console.WriteLine(path);
path = Path.GetFullPath(path);
Console.WriteLine(path);
Будет напечатан:
c:\alpha\beta\..\gamma
c:\alpha\gamma
Ответ 5
Но похоже, что GetFullPath не всегда прав
Попробуйте:
Console.WriteLine(System.IO.Path.GetFullPath(@"\\machine\sharea\foldera\..\shareb\folderb"));
Console.WriteLine(System.IO.Path.GetFullPath(@"\\machine\sharea\foldera\..\..\shareb\folderb"));
Они выводят тот же результат, кажется, что вы не можете переместить его, чтобы перейти на другую часть
Правильный ответ для второго должен быть
\\ Мачинеа \shareb\folderb
но он дает
\\ machinea\sharea\shareb\folderb
для обоих