Saber diretório Atual
Moderador: Moderadores
-
Dudu_XBase
- Membro Master

- Mensagens: 1071
- Registrado em: 25 Ago 2003 16:55
Saber diretório Atual
Alguém conhece um comando ou alguma rotina para eu saber o nome do diretório q esta rodando meu programa ??
________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle
-
Dudu_XBase
- Membro Master

- Mensagens: 1071
- Registrado em: 25 Ago 2003 16:55
(Y) Vlw Marcelo...lpasos de memória...rs...vou formatar minha hd aki...rs e instalar tudo de novo...
________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle
Re: Saber diretório Atual
As funções que os colegas indicaram retornam o diretório corrente do DOS. Mas se por algum acaso seu programa trocar de diretório, é esse que elas vão retornar, e já não será mais de onde o EXE está. Para saber, a qualquer momento, de qual diretório seu programa foi executado, você precisa de uma função como esta. Acho que deve ficar mais fácil.Dudu_XBase escreveu:Alguém conhece um comando ou alguma rotina para eu saber o nome do diretório q esta rodando meu programa ??
[]'s
Maligno
http://www.buzinello.com/prg
-
Dudu_XBase
- Membro Master

- Mensagens: 1071
- Registrado em: 25 Ago 2003 16:55
(Y) obrigado Maligno vou utiliza-la ...vlw
________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle
Acho que a função DIRNAME() ou a CURDIR() funcionam muito bem neste caso, pois ele só precisa executar a função no inicio do programa e guardar em uma variável, esse tipo de função não será usada várias vezes durante o uso do sistema, se ele quer saber onde está o executável basta colocar no inicio do sistema antes de mover-se para outro diretório obviamente.
Até logo.
Marcelo
Até logo.
Marcelo
Ah, sim. Claro. As duas funções, de fato, funcionarão muito bem. Basta fazer isso mesmo: guardar o diretório numa variável. Entretanto há casos especiais (e estes devem ser levados em consideração) em que essas função não terão o efeito desejado. Acho que lhe escaparam dois detalhes:Clipper escreveu:Acho que a função DIRNAME() ou a CURDIR() funcionam muito bem neste caso, pois ele só precisa executar a função no inicio do programa e guardar em uma variável
1) O diretório de onde a aplicação partiu já está numa variável alocada pelo DOS. Portanto, alocar espaço para mais uma variável é gastar memória à toa. Além do que, em qualquer ponto do programa, é só executar a função AppOrigin(). Ela não tomará muitos recursos do sistema.
2) Se o seu programa está sendo executado por meio do PATH, e você está num diretório totalmente diferente, onde não se encontra o seu programa, você verá CURDIR() retornar um diretório que não lhe serve. Se não ficou claro, atente para o exemplo:
Seu programa está em D:\TOOLS\BIN\EXEMPLO\TST.
Na janela DOS você está em C:\WORK\LIB\DISK\SYSTEM\TOOLS.
Se o PATH contiver o caminho, de onde pode ser executado o seu programa, este será executado.
CURDIR() informará WORK\LIB\DISK\SYSTEM\TOOLS (errado, e sem a letra do drive e a contrabarra inicial).
DIRNAME() informará \WORK\LIB\DISK\SYSTEM\TOOLS (errado, e falta o drive).
AppOrign() informará D:\TOOLS\BIN\EXEMPLO\TST (certo, e caminho completo).
[]'s
Maligno
http://www.buzinello.com/prg
Realmente é verdade, com relação ao uso da memória não vejo muito problema uma variável a mais não fará tanta diferença, mas há uma outra solução que é o uso da função EXENAME() da mesma Clipper Tools, tenho insistido no uso da CT porque como ele já usa a mesma não precisaria adicionar mais um módulo ao sistema gastando assim a famosa memória.
Até logo.
Marcelo
Até logo.
Marcelo
Certamente que não. Mas é um mau hábito de programação. E isso é uma coisa que deve sempre ser evitada, quando possível. E no presente caso é.Realmente é verdade, com relação ao uso da memória não vejo muito problema uma variável a mais não fará tanta diferença
Antes você tinha indicado DirName(), que como eu disse, não serve para todos os casos e ainda precisa de uma variável. Agora você deu uma dica realmente boa. Imagino que nem você a use, senão teria sido sua primeira indicação.mas há uma outra solução que é o uso da função EXENAME() da mesma Clipper Tools
Mas eu próprio não conhecia essa função ExeName(). Testei-a e o resultado foi o mesmo da minha função, que agora vou dispensar, uma vez que já uso a CaTools. Ambas devem ter, inclusive, um fonte praticamente igual. E quero aproveitar para agradecer-lhe a dica, que já me fez economizar um pouco.
O gasto de memória nesse caso específico, como eu disse, não representa tanto problema. São só alguns bytes a mais. O problema é quando isso se torna um hábito. Mas,... Cada qual decide seu melhor caminho.tenho insistido no uso da CT porque como ele já usa a mesma não precisaria adicionar mais um módulo ao sistema gastando assim a famosa memória.
[]'s
Maligno
http://www.buzinello.com/prg
-
Dudu_XBase
- Membro Master

- Mensagens: 1071
- Registrado em: 25 Ago 2003 16:55
Eu utilizo mtos comando e funções da Ca Tools mas desconhecia esse...
Quero agradecer ao Marcelo e ao Maligno q postaram e me ajudaram na solução.
Quero agradecer ao Marcelo e ao Maligno q postaram e me ajudaram na solução.
________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle

