Page 1 of 1

PROBLEMAS DE UBICACION CON SETCURDRIVE() O DISKCHANGE()

Posted: Fri Feb 01, 2008 1:17 pm
by JARO
Me explico.
Tengo una aplicación que esta en [c:] en el directorio [prueba]
Cambio a un directorio que cuelga de este llamado [prueba2], posteriormente me cambio a la unidad [z:], cual es mi sorpresa, que cuando cambio a [c:] estoy en [prueba] y no en [prueba2].
Tengo un aplicación que trabaja en 16 bit y funciona perfectamente y ahora al pasarla a 32, está perdiendo el “norte”.

Este problema se puede solucionar quedándose con el directorio, pero se trata de una SRA. APLICATION que hace un montón de gestiones de este tipo y mi pregunta es… Es normal el comportamiento de estas funciones?

Para probar, el código es muy simple.

function main()
?curdir()
?lchdir("prueba2") //cambio de directorio ok
?curdir() //resultado prueba\prueba2
setcurdrive("z:") //esto ok
setcurdrive("c:") //momento que pierde el “norte”
?curdir() //no muestra prueba y esto POR QUE!!??
return nil

perdon mirar al final

Posted: Fri Feb 01, 2008 1:20 pm
by JARO
Me explico.
Tengo una aplicación que esta en [c:] en el directorio [prueba]
Cambio a un directorio que cuelga de este llamado [prueba2], posteriormente me cambio a la unidad [z:], cual es mi sorpresa, que cuando cambio a [c:] estoy en [prueba] y no en [prueba2].
Tengo un aplicación que trabaja en 16 bit y funciona perfectamente y ahora al pasarla a 32, está perdiendo el “norte”.

Este problema se puede solucionar quedándose con el directorio, pero se trata de una SRA. APLICATION que hace un montón de gestiones de este tipo y mi pregunta es… Es normal el comportamiento de estas funciones?

Para probar, el código es muy simple.

function main()
?curdir()
?lchdir("prueba2") //cambio de directorio ok
?curdir() //resultado prueba\prueba2
setcurdrive("z:") //esto ok
setcurdrive("c:") //momento que pierde el “norte”
?curdir() //nos muestra prueba y esto POR QUE!!?? return nil

Re: PROBLEMAS DE UBICACION CON SETCURDRIVE() O DISKCHANGE()

Posted: Fri Feb 01, 2008 1:32 pm
by JARO
JARO wrote:Me explico.
Tengo una aplicación que esta en [c:] en el directorio [prueba]
Cambio a un directorio que cuelga de este llamado [prueba2], posteriormente me cambio a la unidad [z:], cual es mi sorpresa, que cuando cambio a [c:] estoy en [prueba] y no en [prueba2].
Tengo un aplicación que trabaja en 16 bit y funciona perfectamente y ahora al pasarla a 32, está perdiendo el “norte”.

Este problema se puede solucionar quedándose con el directorio, pero se trata de una SRA. APLICATION que hace un montón de gestiones de este tipo y mi pregunta es… Es normal el comportamiento de estas funciones?

Para probar, el código es muy simple.

function main()
?curdir()
?lchdir("prueba2") //cambio de directorio ok
?curdir() //resultado prueba\prueba2
setcurdrive("z:") //esto ok
setcurdrive("c:") //momento que pierde el “norte”
?curdir() //nos muestra prueba y esto POR QUE!!??
return nil

Posted: Fri Feb 01, 2008 1:44 pm
by karinha

Code: Select all

function main()

    MEMVAR cPRGPATH, cFILEPATH

    cPRGPATH := cFILEPATH(GETMODULEFILENAME(GETINSTANCE()))
    cPRGPATH := cShortName(cPRGPATH)  //-> Modified / Modificado al final

    ?curdir()

    ?lchdir("prueba2") //cambio de directorio ok

    ?curdir() //resultado prueba\prueba2

    setcurdrive("z:") //esto ok

    lCHDIR(cPRGPATH)

    setcurdrive("c:") //momento que pierde el “norte”

    ?curdir() //-> Intente ahora.

return nil
//
/*
 *	SPN.PRG
 *
 *	cShortName() - FilePath Long to Short (GetShortPathNameA())
 *
 *	Soporte a Funciones del Api de Windows
 *
 *	Andrade A. Daniel - 2002
 *	Rosario, Argentina
 *
 *	Libre Distribución
 */

/*
 *	cShortName()
 */
FUNCTION cShortName( cLong )

    Local   cShort  := Space(164) + Chr(0)
    Local   nBuffer := 164
    Local   nLen

    nLen    := GetSPName( cLong, @cShort, nBuffer )

    cShort  := Left( cShort, nLen )

RETURN( cShort )

// Windows Api
DLL32 STATIC FUNCTION GetSPName( lpszLongPath AS STRING, lpszShortPath AS STRING, lBuffer AS LONG ) ;
      AS LONG PASCAL FROM "GetShortPathNameA" LIB "kernel32"

//-> END OF PROGRAM - FIM DO PROGRAMA

Posted: Sat Feb 02, 2008 8:45 am
by JARO
Gracias Karinha, pero realmente no es lo que quiero, no me he explicado bien, y ademas me he liado con el POST queriendo corregir la última linea.

El problema radica, en lo siguiente
1º cambio de directorio
2º cambio de unidad
3º vuelvo a launidad
Resultado, no estoy en el directorio donde me he cambiado anteriormente.

function main()
?curdrive() // C
?curdir() // PRUEBA
?lchdir("prueba2") //cambio de directorio ok
?curdir() // PRUEBA\PRUEBA2
setcurdrive("z:")
setcurdrive("c:")
?curdir() // PRUEBA , DEBERÍA SER PRUEBA\PRUEBA

PERO VAMOS... QUE SI NO HAY SOLUCIÓN, ME QUEDO CON LA UBICACIÓN Y PUNTO, Y MODIFICAR EL PROGRAMA.

Posted: Wed Feb 06, 2008 2:03 pm
by karinha
JARO, TIENE QUE GUARDAR EL PRIMER DIRECTORIO EN QUE ESTABAS ANTES DE CAMBIARLO.

DESPUES RETORNAR AL MISMO CON EL LCHDIR().

Posted: Wed Feb 06, 2008 5:44 pm
by JARO
gracias, pero eso es precisamente la parte de código que me quería evitar

Posted: Wed Feb 06, 2008 6:59 pm
by karinha
JARO wrote:gracias, pero eso es precisamente la parte de código que me quería evitar
SE ÉS UNA APLICACION COMERCIAL, NO HAY SALIDA.

MIRA ESTE EJEMPLO, BY CARLOS VARGAS(Nicaragua):

http://www.fivewin.com.br/exibedicas.asp?id=822

Best regards, saludos.