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
getcurdir() y cgetfile()
- Sebastián Almirón
- Posts: 125
- Joined: Mon Dec 12, 2005 9:56 am
- Location: Moralzarzal - Spain
Re: getcurdir() y cgetfile()
João Santos - São Paulo - Brasil
Re: getcurdir() y cgetfile()
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...
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...
- Sebastián Almirón
- Posts: 125
- Joined: Mon Dec 12, 2005 9:56 am
- Location: Moralzarzal - Spain
Re: getcurdir() y cgetfile()
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
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
Re: getcurdir() y cgetfile()
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
- Sebastián Almirón
- Posts: 125
- Joined: Mon Dec 12, 2005 9:56 am
- Location: Moralzarzal - Spain
Re: getcurdir() y cgetfile()
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
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