forma estándar de convertir a ruta corta en.net




path quotes (2)

buscando la forma estándar a prueba de errores para convertir "nombres largos" como "C: \ Documents and settings" a sus "nombres cortos" equivalentes "C: \ DOCUME ~ 1"

Necesito esto para ejecutar un proceso externo desde mi aplicación C #. No funciona si lo alimentaré con rutas en el "nombre largo".


¿El proceso externo falla incluso si encierra las rutas de archivos largas entre comillas? Ese puede ser un método más simple, si la aplicación externa lo admite.

p.ej

myExternalApp "C:\Documents And Settings\myUser\SomeData.file"

Si está preparado para comenzar a llamar a las funciones de API de Windows, GetShortPathName () y GetLongPathName () proporcionan esta funcionalidad.

Consulte http://csharparticles.blogspot.com/2005/07/long-and-short-file-name-conversion-in.html

    const int MAX_PATH = 255;

    [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
    public static extern int GetShortPathName(
        [MarshalAs(UnmanagedType.LPTStr)]
         string path,
        [MarshalAs(UnmanagedType.LPTStr)]
         StringBuilder shortPath,
        int shortPathLength
        );

    private static string GetShortPath(string path) {
        var shortPath = new StringBuilder(MAX_PATH);
        GetShortPathName(path, shortPath, MAX_PATH);
        return shortPath.ToString();
    }




quotes