Domanda

Come si può con il minimo sforzo (utilizzando qualche struttura già esistente, se possibile) di convertire percorsi come c:\aaa\bbb\..\ccc a c:\aaa\ccc?

È stato utile?

Soluzione

Path.GetFullPath forse?

Altri suggerimenti

vorrei scrivere in questo modo:

public static string NormalizePath(string path)
{
    return Path.GetFullPath(new Uri(path).LocalPath)
               .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)
               .ToUpperInvariant();
}

Questo dovrebbe gestire alcuni scenari come

  1. uri e il potenziale fuggiti personaggi in esso, come

      

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

  2. segmenti di percorso specificati da puntini per indicare corrente o directory padre

      

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

  3. accorciati i percorsi (lunghi) tilde

      

    C: \ Progra ~ 1 \ -> C: \ PROGRAMMI

  4. directory incoerente carattere delimitatore

      

    C: / Documents \ abc.txt -> C: \ Documents \ abc.txt

Diversi da quelli, si può ignorare caso, trailing carattere directory \ delimitatore etc.

La canonizzazione è una delle principali responsabilità del Uri classe .NET.

var path = @"c:\aaa\bbb\..\ccc";
var canonicalPath = new Uri(path).LocalPath; // c:\aaa\ccc
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top