cGetFile() en la carpeta principal.

Post Reply
User avatar
karinha
Posts: 8716
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Has thanked: 33 times
Been thanked: 51 times
Contact:

cGetFile() en la carpeta principal.

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

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
El Loco
Posts: 351
Joined: Fri May 19, 2006 4:08 pm
Location: Buenos Aires - Argentina
Been thanked: 6 times

Re: cGetFile() en la carpeta principal.

Post 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

FWH 32/64 14.04
Harbour 3.2.0 (r1306211258)
PellesC
User avatar
karinha
Posts: 8716
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Has thanked: 33 times
Been thanked: 51 times
Contact:

Re: cGetFile() en la carpeta principal.

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

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
El Loco
Posts: 351
Joined: Fri May 19, 2006 4:08 pm
Location: Buenos Aires - Argentina
Been thanked: 6 times

Re: cGetFile() en la carpeta principal.

Post 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

FWH 32/64 14.04
Harbour 3.2.0 (r1306211258)
PellesC
User avatar
karinha
Posts: 8716
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Has thanked: 33 times
Been thanked: 51 times
Contact:

Re: cGetFile() en la carpeta principal.

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

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
Posts: 8716
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Has thanked: 33 times
Been thanked: 51 times
Contact:

Re: cGetFile() en la carpeta principal.

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

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
El Loco
Posts: 351
Joined: Fri May 19, 2006 4:08 pm
Location: Buenos Aires - Argentina
Been thanked: 6 times

Re: cGetFile() en la carpeta principal.

Post 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

FWH 32/64 14.04
Harbour 3.2.0 (r1306211258)
PellesC
User avatar
karinha
Posts: 8716
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Has thanked: 33 times
Been thanked: 51 times
Contact:

Re: cGetFile() en la carpeta principal.

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

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
El Loco
Posts: 351
Joined: Fri May 19, 2006 4:08 pm
Location: Buenos Aires - Argentina
Been thanked: 6 times

Re: cGetFile() en la carpeta principal.

Post 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

FWH 32/64 14.04
Harbour 3.2.0 (r1306211258)
PellesC
Post Reply