FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour cGetFile() en la carpeta principal.
Posts: 8716
Joined: Tue Dec 20, 2005 07:36 PM

cGetFile() en la carpeta principal.

Posted: Thu Sep 10, 2026 10:59 PM

Buenas. Si cambio el directorio con el comando cGetFile(), al volver al programa principal me gustaría que cGetFile() tomara automáticamente la carpeta donde se encuentra dicho programa principal, en lugar de hacerlo manualmente. ¿Existe alguna forma de "forzar" que regrese y utilice la carpeta del ejecutable?

Gracias, tks.

Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 351
Joined: Fri May 19, 2006 04:08 PM

Re: cGetFile() en la carpeta principal.

Posted: Fri Sep 11, 2026 01:54 AM

Hola karinha: En este momento no tengo una máquina a mano pero se me ocurre algo así quizás pueda servirte. Guardas en una variable el directorio del ejecutable: cDirExe:= CurDir() Luego con DirChange(cDirExe) volverias al directorio del ejecutable. Lamentablemente no puedo en este momento probarlo Saludos

FWH 32/64 14.04

Harbour 3.2.0 (r1306211258)

PellesC
Posts: 8716
Joined: Tue Dec 20, 2005 07:36 PM

Re: cGetFile() en la carpeta principal.

Posted: Fri Sep 11, 2026 01:50 PM

Gracias, El Loco. Ya había probado varias posibilidades, pero no funciona de ninguna manera. No entiendo por qué cGetFile() se queda "atrapado" en el último directorio utilizado.

// C:\FWH\SAMPLES\cGetLoco.prg - 11/09/2026 - Kapiaba.

#include "FiveWin.ch"
#Include "Directry.ch"

FUNCTION Main()

   LOCAL cDirExe := GETCURDIR()
   LOCAL cNewDir := cDirExe // "C:\MyFolder"
   LOCAL nResult, cFile

   IF SUBS( cDirExe, LEN( ALLTRIM(cDirExe ) ) , 1 ) = "\"
      cDirExe := SUBS( cDirExe, 1 , LEN( ALLTRIM(cDirExe ) ) - 1 )
   ENDIF

   nResult := DirChange( cNewDir ) // LCHDIR( cDirExe )

   IF nResult == 0

  MsgInfo( "Directory changed successfully to: " + cNewDir )

   ELSE

  MsgStop( "Error: Could not change directory. Check if the path exists." )

   ENDIF

   // NO FUNCIONA.
   /*
   cFile := cGetFile( "ImageFile(*.bmp;*.jpg;*.jpeg;*.png)|*.bmp;*.jpg;*.jpeg;*.png|", ;
                      "Selecione um Arquivo Para Gravar", CurDir(), .T. )
   */


   // TAMBIEN NO FUNCIONA.
   cFile := cGetFile( "ImageFile(*.bmp;*.jpg;*.jpeg;*.png)|*.bmp;*.jpg;*.jpeg;*.png|", ;
                      "Selecione um Arquivo Para Gravar", cNewDir, .T. )

   IF .NOT. EMPTY( cFile )
      xImage( cFile )
   ENDIF

RETURN NIL

// FIN / END - kapiabafwh@gmail.com

Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 351
Joined: Fri May 19, 2006 04:08 PM

Re: cGetFile() en la carpeta principal.

Posted: Fri Sep 11, 2026 03:57 PM

Buenos días Karinha
Proba después de
cFile := cGetFile( "ImageFile(.bmp;.jpg;.jpeg;.png)|.bmp;.jpg;.jpeg;.png|", ;
"Selecione um Arquivo Para Gravar", CurDir(), .T. )
poner:
DirChange(cDirExe) o
ft_ChDir(cDirExe) esta funcion hace lo mismo que DirChange()

Saludos

FWH 32/64 14.04

Harbour 3.2.0 (r1306211258)

PellesC
Posts: 8716
Joined: Tue Dec 20, 2005 07:36 PM

Re: cGetFile() en la carpeta principal.

Posted: Fri Sep 11, 2026 04:30 PM
El Loco wrote:

Buenos días Karinha
Proba después de
cFile := cGetFile( "ImageFile(.bmp;.jpg;.jpeg;.png)|.bmp;.jpg;.jpeg;.png|", ;
"Selecione um Arquivo Para Gravar", CurDir(), .T. )
poner:
DirChange(cDirExe) o
ft_ChDir(cDirExe) esta funcion hace lo mismo que DirChange()

Saludos

Ni por Jesus!! jajajajajaja.

// C:\FWH\SAMPLES\cGetLoco.prg - 11/09/2026 - Kapiaba.

#include "FiveWin.ch"
#Include "Directry.ch"

FUNCTION Main()

   LOCAL cDirExe := GETCURDIR()
   LOCAL cNewDir := cDirExe // "C:\MyFolder"
   LOCAL nResult, cFile

   IF SUBS( cDirExe, LEN( ALLTRIM(cDirExe ) ) , 1 ) = "\"
      cDirExe := SUBS( cDirExe, 1 , LEN( ALLTRIM(cDirExe ) ) - 1 )
   ENDIF

   nResult := DirChange( cNewDir ) // LCHDIR( cDirExe )

   IF nResult == 0

  MsgInfo( "Directory changed successfully to: " + cNewDir )

   ELSE

  MsgStop( "Error: Could not change directory. Check if the path exists." )

   ENDIF

   // NO FUNCIONA.
   cFile := cGetFile( "ImageFile(*.bmp;*.jpg;*.jpeg;*.png)|*.bmp;*.jpg;*.jpeg;*.png|", ;
                      "Selecione um Arquivo Para Gravar", CurDir(), .T. )

   // TAMBIEN NO FUNCIONA.
   /*
   cFile := cGetFile( "ImageFile(*.bmp;*.jpg;*.jpeg;*.png)|*.bmp;*.jpg;*.jpeg;*.png|", ;
                      "Selecione um Arquivo Para Gravar", 1, cNewDir, .T. )
   */

   IF .NOT. EMPTY( cFile )
      xIMAGE( cFile )
   ENDIF

   // No tiene sentido, ya que al entrar de nuevo en la función, ya estoy en la
   // CARPETA DE ORIGEN.
   DirChange( cDirExe ) // NO FUNCIONA

   // NO FUNCIONA - FALTA ALGO? HBNF.LIB? NO TENGO.
   // ft_ChDir(cDirExe) // esta funcion hace lo mismo que DirChange()

   // Error: Unresolved external '_HB_FUN_FT_CHDIR' HARBOUR y XHARBOUR.
   /*
   IF FT_CHDIR( cDirExe ) == 0
      ? "Diretório alterado com sucesso!"
   ELSE
      ? "Erro ao mudar de diretório."
   ENDIF
   */

   /*
   Dica de modernização: No Harbour moderno, você também pode substituir
   o uso da FT_CHDIR() diretamente pela função nativa DirChange() ou
   hb_DirChange(), eliminando a necessidade de depender dessa biblioteca
   externa.
   */

RETURN NIL

// FIN / END - kapiabafwh@gmail.com

Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 8716
Joined: Tue Dec 20, 2005 07:36 PM

Re: cGetFile() en la carpeta principal.

Posted: Fri Sep 11, 2026 04:34 PM

aGetFiles() tambien NO FUNCIONA.

#include "FiveWin.ch"

FUNCTION Main()

   LOCAL cFiles
   LOCAL cDirExe := GETCURDIR()
   LOCAL cNewDir := cDirExe // "C:\MyFolder"
   LOCAL nResult, cFile

   IF SUBS( cDirExe, LEN( ALLTRIM(cDirExe ) ) , 1 ) = "\"
      cDirExe := SUBS( cDirExe, 1 , LEN( ALLTRIM(cDirExe ) ) - 1 )
   ENDIF

   nResult := DirChange( cNewDir ) // LCHDIR( cDirExe )

   IF nResult == 0

  MsgInfo( "Directory changed successfully to: " + cNewDir )

   ELSE

  MsgStop( "Error: Could not change directory. Check if the path exists." )

   ENDIF

   cFiles := aGetFiles( "Image Files (*.jpg, *.png)|*.jpg;*.png", "Select images" )

   IF .NOT. EMPTY( cFiles )

  xIMAGE( cFiles )

   ENDIF

RETURN NIL

Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 351
Joined: Fri May 19, 2006 04:08 PM

Re: cGetFile() en la carpeta principal.

Posted: Fri Sep 11, 2026 04:45 PM

Estuve probando tu ejemplo ...y tenés razón se queda anclado en el directorio de destino. Estoy investigando haber si hay algo en cGetFile() que pueda ayudarnos Saludos

FWH 32/64 14.04

Harbour 3.2.0 (r1306211258)

PellesC
Posts: 8716
Joined: Tue Dec 20, 2005 07:36 PM

Re: cGetFile() en la carpeta principal.

Posted: Fri Sep 11, 2026 04:51 PM
El Loco wrote:

Estuve probando tu ejemplo ...y tenés razón se queda anclado en el directorio de destino.
Estoy investigando haber si hay algo en cGetFile() que pueda ayudarnos
Saludos

cGetFile32() Tambien NO FUNCIONA.

// C:\FWH\SAMPLES\GETFIL32.PRG

#include "FiveWin.ch"
#Include "Directry.ch"

FUNCTION Main()

   LOCAL cDirExe := GETCURDIR()
   LOCAL cNewDir := cDirExe // "C:\MyFolder"
   LOCAL nResult, cFile
   LOCAL cFiltro, cArquivo

   IF SUBS( cDirExe, LEN( ALLTRIM(cDirExe ) ) , 1 ) = "\"
      cDirExe := SUBS( cDirExe, 1 , LEN( ALLTRIM(cDirExe ) ) - 1 )
   ENDIF

   nResult := DirChange( cNewDir ) // LCHDIR( cDirExe )

   IF nResult == 0

  MsgInfo( "Directory changed successfully to: " + cNewDir )

   ELSE

  MsgStop( "Error: Could not change directory. Check if the path exists." )

   ENDIF

   cFiltro := "Arquivos JPG (*.jpg) | *.jpg |" + ;
              "Todos os Arquivos (*.*) | *.* |"

   cArquivo := cGetFile32( cFiltro, "Selecione o arquivo JPG para importar", 1, "C:\PETSHOP" )

   IF Empty( cArquivo )
      MsgStop( "Nenhum arquivo foi selecionado!", "Atenção" )
   ELSE
      xIMAGE( cArquivo )
   ENDIF

   DirChange( cDirExe ) // NO FUNCIONA

RETURN NIL

// FIN / END

Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 351
Joined: Fri May 19, 2006 04:08 PM

Re: cGetFile() en la carpeta principal.

Posted: Fri Sep 11, 2026 06:01 PM

Karinha probé todos los samples de Fivewin que contengan cGetFile() y hacen lo mismo quedan colgado en el directorio "destino" Si no me equivoco me parece que es un tema del propio Windows, que a mi entender no está nada bien o por lo menos dejar la chance de elegir. Voy a seguir con el tema Chauchi

FWH 32/64 14.04

Harbour 3.2.0 (r1306211258)

PellesC

Continue the discussion