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.