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:aaabb..ccc -> C:AAACCC
tilde shortened (long) paths
C:Progra~1 -> C:PROGRAM FILES
inconsistent directory delimiter character
C:/Documentsabc.txt -> C:DOCUMENTSABC.TXT
Other than those, it can ignore case, trailing
directory delimiter character etc.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…