PROBLEMAS DE UBICACION CON SETCURDRIVE() O DISKCHANGE()

PROBLEMAS DE UBICACION CON SETCURDRIVE() O DISKCHANGE()

Postby JARO » Fri Feb 01, 2008 1:17 pm

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

Postby JARO » Fri Feb 01, 2008 1:20 pm

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()

Postby JARO » Fri Feb 01, 2008 1:32 pm

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

Postby karinha » Fri Feb 01, 2008 1:44 pm

Code: Select all  Expand view
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 - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Postby JARO » Sat Feb 02, 2008 8:45 am

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

Postby karinha » Wed Feb 06, 2008 2:03 pm

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 - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Postby JARO » Wed Feb 06, 2008 5:44 pm

gracias, pero eso es precisamente la parte de código que me quería evitar
JARO
 
Posts: 30
Joined: Thu Oct 25, 2007 7:54 pm

Postby karinha » Wed Feb 06, 2008 6:59 pm

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 - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 84 guests