cGetFile() - ¿ Límite de caracteres en nombre del archivo?

cGetFile() - ¿ Límite de caracteres en nombre del archivo?

Postby César E. Lozada » Sun Sep 21, 2008 8:00 pm

Parece que cGetFile() devuelve un string vacío cuando el nombre del archivo seleccionado (con la ruta), excede los 127 caracteres.

¿Es esto normal? ¿Cómo puede corregirse?

Gracias.
User avatar
César E. Lozada
 
Posts: 128
Joined: Wed Oct 26, 2005 12:18 pm
Location: Los Teques, Miranda, Venezuela

Postby Antonio Linares » Sun Sep 21, 2008 8:30 pm

César,

cGetFile() admite hasta 255 caracteres, aunque se podría ampliar.

Aqui tienes un ejemplo en el que seleccionamos un nombre de fichero de 162 caracteres:
Code: Select all  Expand view  RUN
   local cFileName := cGetFile( "*.*", "Select a file" )

   MsgInfo( cFileName, Len( cFileName ) )

Image
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42161
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby César E. Lozada » Mon Sep 22, 2008 12:29 am

Gracias, Antonio.

Pero no logro que me devuelva algo no vacío cuando selecciono:

C:\Documents and Settings\CESAR.SERVIDOR\Mis documentos\Mis imágenes\CARATULAS DE PS2\Los Padrinos Magicos - Shadows Showdown.jpg

(129 caracteres) a menos que le elimine la última palabra en el nombre del archivo.

FWH803+BCC55+xHB1
User avatar
César E. Lozada
 
Posts: 128
Joined: Wed Oct 26, 2005 12:18 pm
Location: Los Teques, Miranda, Venezuela

Postby Antonio Linares » Mon Sep 22, 2008 11:20 am

César,

Por favor revisa que tengas esta línea con este valor en fwh\source\winapi\getfile.c:

pFile = ( LPSTR ) _xgrab( 256 );
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42161
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby César E. Lozada » Tue Sep 23, 2008 3:20 am

Hola, Antonio.

Tienes razón y te pido disculpas por mi error.

Fue por un olvido mío y por la falta de un parámetro en cGetFile. Aprovecho para comentarte sobre este parámetro faltante por si lo consideras de utilidad.

En 2004 hice una modificación a cGetFile consistente de otro parámetro lMultiSelect que permita la selección de múltiples archivos haciendo
nFlags:=nOr(nFlags,if(lMultiSelect,OFN_ALLOWMULTISELECT,0)).

Guardé este cambio en una lib personal y la tenía enlazada a la aplcación que me falla. Como los años no pasan balde, la había olvidado completamente.

Por ser tan antiguo el code de mi cGetFile ponía

if ( dwFlags & OFN_ALLOWMULTISELECT )
pFile = ( LPSTR ) hb_xgrab( 32768 );
else
pFile = ( LPSTR ) hb_xgrab( 128 ); // - UFF!
:
:
if( GetOpenFileName( &ofn ) )
if ( dwFlags & OFN_ALLOWMULTISELECT )
hb_retclen( pFile, 32768 );
else
hb_retc( pFile );
else
hb_retc( "" );


Claramente aquí esta el error.

De nuevo mil disculpas y como siempre muchas gracias.
User avatar
César E. Lozada
 
Posts: 128
Joined: Wed Oct 26, 2005 12:18 pm
Location: Los Teques, Miranda, Venezuela


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 69 guests