FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour cGetFile() - ¿ Límite de caracteres en nombre del archivo?
Posts: 128
Joined: Wed Oct 26, 2005 12:18 PM
cGetFile() - ¿ Límite de caracteres en nombre del archivo?
Posted: Sun Sep 21, 2008 08: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.

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
cGetFile() - ¿ Límite de caracteres en nombre del archivo?
Posted: Sun Sep 21, 2008 08: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:
   local cFileName := cGetFile( "*.*", "Select a file" )
 
   MsgInfo( cFileName, Len( cFileName ) )

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 128
Joined: Wed Oct 26, 2005 12:18 PM
cGetFile() - ¿ Límite de caracteres en nombre del archivo?
Posted: 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

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
cGetFile() - ¿ Límite de caracteres en nombre del archivo?
Posted: 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
Posts: 128
Joined: Wed Oct 26, 2005 12:18 PM
cGetFile() - ¿ Límite de caracteres en nombre del archivo?
Posted: Tue Sep 23, 2008 03: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.

Continue the discussion