getcurdir() y cgetfile()

getcurdir() y cgetfile()

Postby Sebastián Almirón » Mon Sep 05, 2011 10:38 am

Hola a todos,

el siguiente código:
Msgalert('Paso1: ' + getcurdir() )
cdesti := cGetFile('Archivos Excel (*.xls) | *.xls','Guardar libro',,,.t.,.t.,2,cname)
Msgalert('Paso2: ' + getcurdir() )

En el paso 1 me muestra el directorio de la aplicación, pero en el paso 2 me muestra la carpeta que haya elegido en el dialogo de seleccionar el fichero. Es decir cgetfile() cambia el valor del directorio actual. ¿ Existe manera de evitar esto ? o al menos una functión del tipo setcurdir() a la que pueda llamar inmediatamente después. Por ejemplo si tras un cgetfile() ocurre un error, el fichero .log me lo graba en la carpeta seleccionada en cGetfile() en vez de en la carpeta de la aplicación. Incluso cambia el SET DEFAULT TO, aunque esto lo puedo arreglar guardando el valor de getcurdir() en una variable al iniciar la aplicación y luego SET DEFAULT TO &variable, pero no en el caso de ficheros que quiero guardar automáticamente en la carpeta de la aplicación.

En FW16 con cgetfile32() no se cambiaba el valor del directorio actual y el mismo código devuelve en los dos pasos el mismo valor.

Saludos
User avatar
Sebastián Almirón
 
Posts: 155
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Re: getcurdir() y cgetfile()

Postby karinha » Mon Sep 05, 2011 1:23 pm

talbéz:



Code: Select all  Expand view

     cPath := CURDRIVE() + ":\" + GETCURDIR()
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7213
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: getcurdir() y cgetfile()

Postby Bayron » Mon Sep 05, 2011 1:28 pm

Para obtener el directorio de la aplicacion deberias acerlo así:

Code: Select all  Expand view
Msgalert('Paso2: ' + cFilePath( GetModuleFileName( GetInstance() ) ) )
 
=====>

Bayron Landaverry
(215)2226600 Philadelphia,PA, USA
+(502)46727275 Guatemala
MayaBuilders@gMail.com

FWH12.04||Harbour 3.2.0 (18754)||BCC6.5||UEstudio 10.10||
Windows 7 Ultimate

FiveWin, One line of code and it's done...
User avatar
Bayron
 
Posts: 815
Joined: Thu Dec 24, 2009 12:46 am
Location: Philadelphia, PA

Re: getcurdir() y cgetfile()

Postby Sebastián Almirón » Mon Sep 05, 2011 2:20 pm

Bueno, gracias por contestar, pero no se si me he explicado bien.

No se trata de obtener el path de la aplicación, de lo que se trara es de que curdir() devuelva lo mismo antes y después de llamar a cgetfile(), o si no hay más remedio, alguna función para que curdir() devuelva el path de la aplicación. Muchas funciones, tanto mias como de FW/Harbour, graban ficheros provisionales o de otro tipo en la carpeta de la aplicación sin indicarle en que carpeta debe crear esos ficheros, ya que por defecto se crean en la carpeta de la aplicación, lo mismo que hace por ejemplo MemoWrit() si como primer parámetro solo se le pasa un nombre de un fichero sin ruta.

Si tras llamar a cgetfile() provocamos un error, la llamada a memowrit() que hay en errsysw.prg, no crea el fichero error.log en la carpeta de la aplicación como debería ser, se crea en la carpeta seleccionada en cgetfile() y creo que eso no debería ser así. Este comprotamiento no ocurría en Clipper/FW16, donde siempre se guarda el fichero error.log en la carpeta de la aplicación, aunque hayamos usado cgetfile(). Lo de memowrit() es solo un ejemplo, ocurre con otras muchas funciones.

Saludos
User avatar
Sebastián Almirón
 
Posts: 155
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Re: getcurdir() y cgetfile()

Postby karinha » Mon Sep 05, 2011 2:35 pm

Creo sea esto:

Code: Select all  Expand view

FUNCTION XBLITE()  //->MAIN()

    MEMVAR cPRGPATH, cFILEPATH

    cPRGPATH := cFILEPATH(GETMODULEFILENAME(GETINSTANCE()))

    XBACKUPLITE()

    lCHDIR(cPRGPATH) //-> aca vuelve al directorio inicial.

RETURN NIL
 
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7213
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: getcurdir() y cgetfile()

Postby Sebastián Almirón » Wed Sep 07, 2011 11:46 am

Gracias Karinha,

La función lchdir() es la que buscaba (nunca hasta ahora había tenido necesidad de utilizarla).

Pero insisto en que cgetfile() no debería cambiar el path (también cambia el SET DEFAULT), en su lugar me he hecho una functión llamada Getfile(), para sustiruirla:

function Getfile(cFileMask, cTitle, nDefaultMask, cInitialDirectory, lSave, nFlags, cInitialFile )
local cPRGPATH := cFILEPATH(GETMODULEFILENAME(GETINSTANCE())), sal := ''
sal := cGetfile(cFileMask, cTitle, nDefaultMask, cInitialDirectory, lSave, nFlags, cInitialFile )
lCHDIR(cPRGPATH)
SET DEFAULT TO //Mis dbfs están en el mismo directorio que la aplicación
return sal

Saludos
User avatar
Sebastián Almirón
 
Posts: 155
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 69 guests