Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
683 views
in Technique[技术] by (71.8m points)

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

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

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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:aaabb..ccc -> C:AAACCC

  3. tilde shortened (long) paths

    C:Progra~1 -> C:PROGRAM FILES

  4. inconsistent directory delimiter character

    C:/Documentsabc.txt -> C:DOCUMENTSABC.TXT

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...