getcurdir() y cgetfile()

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

getcurdir() y cgetfile()

Post by Sebastián Almirón »

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

Re: getcurdir() y cgetfile()

Post by karinha »

talbéz:


Code: Select all

     cPath := CURDRIVE() + ":\" + GETCURDIR()
João Santos - São Paulo - Brasil
User avatar
Bayron
Posts: 815
Joined: Thu Dec 24, 2009 12:46 am
Location: Philadelphia, PA

Re: getcurdir() y cgetfile()

Post by Bayron »

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

Code: Select all

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
Sebastián Almirón
Posts: 125
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Re: getcurdir() y cgetfile()

Post by Sebastián Almirón »

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

Re: getcurdir() y cgetfile()

Post by karinha »

Creo sea esto:

Code: Select all

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
User avatar
Sebastián Almirón
Posts: 125
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Re: getcurdir() y cgetfile()

Post by Sebastián Almirón »

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
Post Reply