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".


Answer #1

¿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"

Answer #2

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