2 votes

Comment raccourcir un chemin en c# et le garder valide ?

Je travaille dans un endroit où les annuaires ont un nom si long et sont dans un arbre si long.

Et j'ai des problèmes avec des noms de chemin trop longs pour les dossiers dans une application externe (je ne peux pas changer cette application externe, mais je peux lui donner des noms de chemin plus courts).

Je sais que les systèmes d'exploitation Microsoft peuvent raccourcir les noms de chemin comme la transformation C:\TooLongName\TooLongSubDirectory en quelque chose comme C:\TooLon~1\TooLon~1 .

Mais comment puis-je faire cela en C# tout en gardant la nef valide et utilisable ?

PS : Je n'utilise pas la norme FileInfo y DirectoryInfo J'utilise uniquement des chaînes de caractères qui seront envoyées à une application externe que je ne peux modifier en aucune façon.

1voto

Darren Points 253

Si vous ne pouvez pas utiliser la prise en charge des chemins longs intégrée à Windows 10, vous pouvez utiliser la commande Win32 GetShortPathName . Afin de générer un chemin approprié.

class Program
{
    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    static extern uint GetShortPathName(
       [MarshalAs(UnmanagedType.LPTStr)]
       string lpszLongPath,
       [MarshalAs(UnmanagedType.LPTStr)]
       StringBuilder lpszShortPath,
       uint cchBuffer);

    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    static extern uint GetShortPathName(string lpszLongPath, char[] lpszShortPath, int cchBuffer);

    static void Main(string[] args)
    {
        StringBuilder builder = new StringBuilder(260);
        var shortPath = GetShortPathName(@"C:\Projects\Databases\ReallllllllllllllyLOOOOOOOOOOOOOOOOOOOOOONGPATHHHHHHHHHHH\StillllllllllllllllllGOoooooooooooooooooooooooing", builder, (uint)builder.Capacity);
        Console.WriteLine(builder.ToString());
        Console.ReadKey();
    }
}

Produit C:\Projects\DATABA ~1 \REALLL ~1 \STILLL ~1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X