Ir al contenido


Foto

Ruta corta de archivo usando GetShortPathName


  • Por favor identifícate para responder
3 respuestas en este tema

#1 jdepaz

jdepaz

    Advanced Member

  • Miembros
  • PipPipPip
  • 264 mensajes
  • LocationMedellín Colombia

Escrito 26 agosto 2011 - 10:09

Saludos a todos.

Tengo el siguiente método que recibe la ruta larga de un archivo X,
y que necesito convertir a su ruta corta:


cpp
  1. AnsiString __fastcall TForm1::ShortPath(AnsiString ruta){
  2.   char *shortPath=(char*)alloca(ruta.Length()+1);
  3.   GetShortPathName(ruta.c_str(),shortPath,ruta.Length()+1);
  4.   return AnsiString(shortPath);
  5. }

Pero resulta que teniendo esta ruta:

C:\Share_JP\Prueba1\New Folder\abc.txt

Me devuelve el valor como se muestra en la figura que adjunto, entonces con ese valor resuelto
tengo otro método que intenta abrir tal archivo y alli sucede un error, porque el valor devuelto
de ruta corta es así (según la imagen adjunta):

X¿\f@Üm


Y de allí me muestra el mensaje de error que tal ruta no existe!

Entonces de alli la orientación que necesito para resolver este problema.


Saludos y gracias

Archivos adjuntos


  • 0

#2 jdepaz

jdepaz

    Advanced Member

  • Miembros
  • PipPipPip
  • 264 mensajes
  • LocationMedellín Colombia

Escrito 26 agosto 2011 - 10:13

Por alguna extraña razón el comportamiento de CBuilder 6 o quizas el SO en la PC donde trabajo me presenta este inconveniente, pero en mi localhost me muestra la ruta tal cual, es cuestión de investigar que sucede




:shocked:
  • 0

#3 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 27 agosto 2011 - 01:32

La API GetShortPathName devuelve 0 si erró. Si no existe la ruta especificada, fallará. comprueba este punto.

Si de produce el fallo, la cadena resultante contendrá caracteres erráticos...

Saludos.

  • 0

#4 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 29 agosto 2011 - 02:23

Una optimizaión de tu código que no de valores erráticos puede ser esta:


cpp
  1. String __fastcall ShortPath(String ruta)
  2. {
  3.   ShortString shortPath;
  4.   shortPath[0] = GetShortPathName(ruta.c_str(), &shortPath[1], sizeof(ShortString)-1);
  5.   return shortPath;
  6. }


Saludos.
  • 0




IP.Board spam blocked by CleanTalk.