Page 1 of 1

cGetFile() en la carpeta principal.

Posted: Thu Sep 10, 2026 10:59 pm
by karinha

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.


Re: cGetFile() en la carpeta principal.

Posted: Fri Sep 11, 2026 1:54 am
by El Loco

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


Re: cGetFile() en la carpeta principal.

Posted: Fri Sep 11, 2026 1:50 pm
by karinha

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.

Code: Select all | Expand

// 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.


Re: cGetFile() en la carpeta principal.

Posted: Fri Sep 11, 2026 3:57 pm
by El Loco

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


Re: cGetFile() en la carpeta principal.

Posted: Fri Sep 11, 2026 4:30 pm
by karinha
El Loco wrote: Fri Sep 11, 2026 3: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

Ni por Jesus!! jajajajajaja.

Code: Select all | Expand

// 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.


Re: cGetFile() en la carpeta principal.

Posted: Fri Sep 11, 2026 4:34 pm
by karinha

aGetFiles() tambien NO FUNCIONA.

Code: Select all | Expand

#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.


Re: cGetFile() en la carpeta principal.

Posted: Fri Sep 11, 2026 4:45 pm
by El Loco

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


Re: cGetFile() en la carpeta principal.

Posted: Fri Sep 11, 2026 4:51 pm
by karinha
El Loco wrote: Fri Sep 11, 2026 4: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

cGetFile32() Tambien NO FUNCIONA.

Code: Select all | Expand

// 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.


Re: cGetFile() en la carpeta principal.

Posted: Fri Sep 11, 2026 6:01 pm
by El Loco

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