Page 1 of 1

oFtp:Directory() devuelve nombres erroneos

PostPosted: Mon Jun 11, 2018 4:58 pm
by hmpaquito
Hola,

El metodo Directory de la clase oFtp devuelve, algunas veces, nombres de ficheros con caracteres extraños y/o incluyendo varios archivos en el mismo nombre ?

El asunto me viene pasando desde hace varios años, pero sólo hoy me he atrevido a explicar.

No he visto este asunto referenciado en el foro. ¿ Alguna idea de alguien ?

Salu2

Re: oFtp:Directory() devuelve nombres erroneos

PostPosted: Mon Jun 11, 2018 6:37 pm
by karinha

Re: oFtp:Directory() devuelve nombres erroneos

PostPosted: Tue Jun 12, 2018 3:53 pm
by hmpaquito
Estimado Señor,

Lo que vd. me propone es un cambio total en mi forma de manejar el Ftp.
Yo, en cambio, sólo preguntaba por un pequeño error que tiene la clase Ftp.

Gracias en todo caso.

Re: oFtp:Directory() devuelve nombres erroneos

PostPosted: Wed Jun 13, 2018 6:00 pm
by Carlos Mora
Estimado Paquito,
¿Puede ser que el servidor esté enviando los nombres en UTF-8? Si es así seguramente se ven mal. ¿Puedes subir un ejemplo para ver cual es el posible cambio?
Eso de tener varios ficheros con el mismo nombre puede ser provocado por la confusión al consultar si existe un determinado fichero con un caracter especial (con tilde, por ejemplo).

Un saludo

Re: oFtp:Directory() devuelve nombres erroneos

PostPosted: Thu Jun 14, 2018 7:19 am
by hmpaquito
Estimadísimo Carlos,

Un ejemplo de fichero que erroneamente devuelve el metodo oFtp:Directory(), sería este:

"045in 0 LŒ. € È`RÿÓ Ÿ D FILECSV.zip"

El archivo real es FILECSV.zip, pero lo devuelve con caracteres sucios. Practicamente pasa siempre que hago un oFtp:Directory()

Utilizo la clase TFtp y el metodo de oFtp:Directory() originales.

Gracias por tu interés.

Re: oFtp:Directory() devuelve nombres erroneos

PostPosted: Fri Jun 22, 2018 10:41 am
by hmpaquito
Vuelvo con el asunto.
He hecho unas investigaciones y todo apunta a que el problema es un problema de codificacion.

Pareciera que hay que apagar el UTF8 antes de hacer el oftp:directory

Lo que me parece muy raro es que a nadie le haya pasado antes.

¿ Es que nadie usa ftp-fwh contra servidores trabajando en utf-8?

https://stackoverflow.com/questions/117 ... g/26101338

La pregunta seria: ¿ Como mandar al ftp el comando OPTS UTF8 OFF ?

Re: oFtp:Directory() devuelve nombres erroneos

PostPosted: Fri Jun 22, 2018 10:51 am
by cnavarro
Actualmente tienes el UTF8 activo en tu aplicacion?
Si no es asi, deberías probar activando el UTF8, quiero decir en el proceso que utiliza FTP
Code: Select all  Expand view


  local cOldCode  := HB_SETCODEPAGE( "UTF8" )
  //local lUni        := FW_SetUnicode( .T. )
   .../..

   HB_SETCODEPAGE( cOldCode )
   //FW_SetUnicode( lUni )

 

Re: oFtp:Directory() devuelve nombres erroneos

PostPosted: Fri Jun 22, 2018 11:16 am
by hmpaquito
Cristobal,

Gracias por tu respuesta, pero no creo que deba ser eso.

A veces el oFtp:Directory me devuelve archivos con este nombre:
è`r+``er`w´rèëëé3´´3algo.zipr`w´rèëëé3fichero.zip
donde se puede observar que vienen dos archivos. Es como si no entendiera el caracter LF o asi. Es como si el server ftp estuviera en *nix OS y no se entendiera con Windows.

Esto ya lo vi hace tiempo con otra aplicacion. Para "salvarlo" lo que hice fue depurar el array aDir devuelto en aDir:= oFtp:Directory()

Lo curioso es que a nadie más le haya pasado.

Saludos

Re: oFtp:Directory() devuelve nombres erroneos

PostPosted: Fri Jun 22, 2018 11:57 am
by cnavarro
hmpaquito wrote:Cristobal,

Gracias por tu respuesta, pero no creo que deba ser eso.

Saludos


Paco, si puedes, prueba lo que te digo a ver qué te devuelve

Re: oFtp:Directory() devuelve nombres erroneos

PostPosted: Fri Jun 22, 2018 12:03 pm
by hmpaquito
Cristobal,

Ok, haré lo que me dices.
Voy a hacer un testing a ver que me devuelve antes y despues, indicando la codificacion que me dices.

gracias por tu interés.

Re: oFtp:Directory() devuelve nombres erroneos

PostPosted: Fri Jun 22, 2018 2:16 pm
by hmpaquito
Traigo un ejemplo del array que devuelve el metodo oFtp:Directory() (está todo pasado a cadena)

Code: Select all  Expand view
{ [1]C. Len: 12 "011XSL.zip" [2]N. 1740 [3]D. 21/06/18 [4]C. Len: 8 "18:25:00" }
 { [1]C. Len: 12 "015XSL.zip" [2]N. 529 [3]D. 21/06/18 [4]C. Len: 8 "18:01:00" }
 { [1]C. Len: 44 "034in    æû)  Ô    Ì  D      011XSL.zip" [2]N. 0 [3]D. 21/06/18 [4]C. Len: 8 "14:10:00" }
 { [1]C. Len: 44 "045BuscaClientes.dat  D      015XSL.zip" [2]N. 26403 [3]D. 20/06/18 [4]C. Len: 8 "20:23:00" }"



Si os dais cuenta, los dos primeros items son correctos: dos ficheros. En cambio los dos ultimos están mal: tienen caractereres extraños, uno contiene dos nombres de archivo.

Re: oFtp:Directory() devuelve nombres erroneos

PostPosted: Fri Jun 22, 2018 8:54 pm
by hmpaquito
Cristobal,

Acabo de probar tu indicacion y sigue saliendo mal.

¿ Alguna idea más que puedas compartir ?

Gracias

PD 1. El UTF8 del hb_SetCodePage() lo coge bien puesto que lo muestro, despues de establecerlo con msgInfo(hb_setCodePage()) y muestra UTF8
PD 2. Es como si la clase TFtp no recogiese bien el directory porque no se parase en el separador LF o el que corresponda y por tanto mezclara mas de un nombre de archivo con cada archivo y ademas le añadiera basura.

** EDITADO 23/6/18 **
Adjunto codigo fuente de la prueba

Code: Select all  Expand view
//-------------------------------------------------------------------------//
static function probandoftp()

   local oInternet := TInternet():New()
   local oFtp
   local aFiles

   Local nI, aMask, cIp, nPuerto, cUser, cPassword
   Local cFolder:= ""
   Local cFull
   Local lPasivo:= .t.

   REQUEST HB_CODEPAGE_UTF8
   Local cOldCode

   cOldCode:= Hb_SetCodepage("UTF8")

   msginfo(coldcode, hb_setcodepage())


      cIp      := "prueba.algo.com"
      nPuerto  :=  2043
      *


      cUser    := "ELUSUARIO"
      cPassword:= "4c3PASS"
      *
      oFTP      := TFTP():New( cIp, oInternet, cUser, cPassword, lPasivo, nPuerto )

   if ! Empty( oFTP:hFTP )

   amask:= {"*.zip", "*.*", "*.sql"}
   for ni:= 1 to len(amask)
      cFull:= cFolder+ "/"+ aMask[nI]

         aFiles = oFTP:Directory( cFull)
      msgInfo(hb_valtoexp(aFiles))
   next

   else

       msginfo("oFtp:hFtp is Null")
   endif

   oInternet:End()

   
   MsgInfo( "Done!" )

   HB_SETCODEPAGE( cOldCode )
return nil
*

Re: oFtp:Directory() devuelve nombres erroneos

PostPosted: Sat Jun 23, 2018 2:04 pm
by hmpaquito
Segun https://stackoverflow.com/questions/420 ... racter-set hay q trabajar el ftp en modo binary. Sabe alguien como establecer el ftp en modo binary ?