How can one get an absolute or normalized file path in .NET?

后端 未结 3 994
借酒劲吻你
借酒劲吻你 2020-11-29 09:54

How can one with minimal effort (using some already existing facility, if possible) convert paths like c:\\aaa\\bbb\\..\\ccc to c:\\aaa\\ccc?

相关标签:
3条回答
  • 2020-11-29 10:28

    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

    1. uri and potential escaped characters in it, like

      file:///C:/Test%20Project.exe -> C:\TEST PROJECT.EXE

    2. path segments specified by dots to denote current or parent directory

      c:\aaa\bbb\..\ccc -> C:\AAA\CCC

    3. tilde shortened (long) paths

      C:\Progra~1\ -> C:\PROGRAM FILES

    4. inconsistent directory delimiter character

      C:/Documents\abc.txt -> C:\DOCUMENTS\ABC.TXT

    Other than those, it can ignore case, trailing \ directory delimiter character etc.

    0 讨论(0)
  • 2020-11-29 10:38

    Path.GetFullPath perhaps?

    0 讨论(0)
  • 2020-11-29 10:38

    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
    
    0 讨论(0)
提交回复
热议问题