FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour getcurdir() y cgetfile()
Posts: 166
Joined: Mon Dec 12, 2005 09:56 AM
getcurdir() y cgetfile()
Posted: 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

Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: getcurdir() y cgetfile()
Posted: Mon Sep 05, 2011 01:23 PM
talb茅z:



Code (fw): Select all Collapse
     cPath := CURDRIVE() + ":\" + GETCURDIR()
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 883
Joined: Thu Dec 24, 2009 12:46 AM
Re: getcurdir() y cgetfile()
Posted: Mon Sep 05, 2011 01:28 PM
Para obtener el directorio de la aplicacion deberias acerlo as铆:

Code (fw): Select all Collapse
Msgalert('Paso2: ' + cFilePath( GetModuleFileName( GetInstance() ) ) )

=====>

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

FWH25.06--Harbour 3.0.0--BCC7.7--UEstudio 10.10
Windows 10

FiveWin, One line of code and it's done...

Posts: 166
Joined: Mon Dec 12, 2005 09:56 AM
Re: getcurdir() y cgetfile()
Posted: Mon Sep 05, 2011 02: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

Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: getcurdir() y cgetfile()
Posted: Mon Sep 05, 2011 02:35 PM
Creo sea esto:

Code (fw): Select all Collapse
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
Posts: 166
Joined: Mon Dec 12, 2005 09:56 AM
Re: getcurdir() y cgetfile()
Posted: 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

Continue the discussion