.net path quotes

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



path quotes (3)

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

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


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(); }


El truco con GetShortPathName de WinAPI funciona bien, pero tenga cuidado cuando utilice rutas muy largas allí.

Acabamos de tener un problema al llamar a 7zip con rutas más largas que MAX_PATH. GetShortPathName no funcionaba si la ruta era demasiado larga. Simplemente prefiéralo con "/? /" Y luego hará el trabajo y devolverá la ruta correctamente acortada.