Jump to content


Photo

Ruta corta de archivo usando GetShortPathName


  • Please log in to reply
3 replies to this topic

#1 jdepaz

jdepaz

    Advanced Member

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

Posted 26 August 2011 - 10:09 AM

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

Attached Files


  • 0

#2 jdepaz

jdepaz

    Advanced Member

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

Posted 26 August 2011 - 10:13 PM

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
  • 4111 posts
  • LocationMadrid - España

Posted 27 August 2011 - 01:32 PM

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
  • 4111 posts
  • LocationMadrid - España

Posted 29 August 2011 - 02:23 AM

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.