Ответ 1
Path.GetFullPath
возможно?
Как можно с минимальными усилиями (используя какое-то уже существующее средство, если это возможно) конвертировать пути типа c:\aaa\bbb\..\ccc
в c:\aaa\ccc
?
Path.GetFullPath
возможно?
Я бы написал это следующим образом:
public static string NormalizePath(string path)
{
return Path.GetFullPath(new Uri(path).LocalPath)
.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)
.ToUpperInvariant();
}
Это должно обрабатывать несколько сценариев, таких как
uri и потенциально экранированные символы, например
file:///C:/Test%20Project.exe → C:\TEST PROJECT.EXE
сегменты пути, заданные точками, для обозначения текущего или родительского каталога
c:\aaa\bbb \..\ccc → C:\AAA\CCC
укороченные (длинные) дорожки тильды
C:\Progra ~ 1\- > C:\PROGRAM FILES
несогласованный символ разделителя каталогов
C:/Documents\abc.txt → C:\DOCUMENTS\ABC.TXT
Кроме этого, он может игнорировать регистр, обращаясь к символу разделителя \
и т.д.
Canonicalization является одной из основных обязанностей класса Uri в .NET.
var path = @"c:\aaa\bbb\..\ccc";
var canonicalPath = new Uri(path).LocalPath; // c:\aaa\ccc