Подтвердить что ты не робот

Как можно получить абсолютный или нормализованный путь к файлу в .NET?

Как можно с минимальными усилиями (используя какое-то уже существующее средство, если это возможно) конвертировать пути типа c:\aaa\bbb\..\ccc в c:\aaa\ccc?

4b9b3361

Ответ 1

Path.GetFullPath возможно?

Ответ 2

Я бы написал это следующим образом:

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

Кроме этого, он может игнорировать регистр, обращаясь к символу разделителя \ и т.д.

Ответ 3

Canonicalization является одной из основных обязанностей класса Uri в .NET.

var path = @"c:\aaa\bbb\..\ccc";
var canonicalPath = new Uri(path).LocalPath; // c:\aaa\ccc