PROBLEMAS DE UBICACION CON SETCURDRIVE() O DISKCHANGE()

Post Reply
JARO
Posts: 30
Joined: Thu Oct 25, 2007 7:54 pm

PROBLEMAS DE UBICACION CON SETCURDRIVE() O DISKCHANGE()

Post 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
JARO
Posts: 30
Joined: Thu Oct 25, 2007 7:54 pm

perdon mirar al final

Post 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
JARO
Posts: 30
Joined: Thu Oct 25, 2007 7:54 pm

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

Post 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
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Post 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
João Santos - São Paulo - Brasil
JARO
Posts: 30
Joined: Thu Oct 25, 2007 7:54 pm

Post 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.
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Post by karinha »

JARO, TIENE QUE GUARDAR EL PRIMER DIRECTORIO EN QUE ESTABAS ANTES DE CAMBIARLO.

DESPUES RETORNAR AL MISMO CON EL LCHDIR().
João Santos - São Paulo - Brasil
JARO
Posts: 30
Joined: Thu Oct 25, 2007 7:54 pm

Post by JARO »

gracias, pero eso es precisamente la parte de código que me quería evitar
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Post 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.
João Santos - São Paulo - Brasil
Post Reply