How can one with minimal effort (using some already existing facility, if possible) convert paths like c:\\aaa\\bbb\\..\\ccc
to c:\\aaa\\ccc
?
I would write it like this:
public static string NormalizePath(string path)
{
return Path.GetFullPath(new Uri(path).LocalPath)
.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)
.ToUpperInvariant();
}
This should handle few scenarios like
uri and potential escaped characters in it, like
file:///C:/Test%20Project.exe -> C:\TEST PROJECT.EXE
path segments specified by dots to denote current or parent directory
c:\aaa\bbb\..\ccc -> C:\AAA\CCC
tilde shortened (long) paths
C:\Progra~1\ -> C:\PROGRAM FILES
inconsistent directory delimiter character
C:/Documents\abc.txt -> C:\DOCUMENTS\ABC.TXT
Other than those, it can ignore case, trailing \
directory delimiter character etc.
Path.GetFullPath
perhaps?
Canonicalization is one of the main responsibilities of the Uri class in .NET.
var path = @"c:\aaa\bbb\..\ccc";
var canonicalPath = new Uri(path).LocalPath; // c:\aaa\ccc