Página 1 de 1

Saber diretório Atual

Enviado: 18 Set 2004 11:49
por Dudu_XBase
Alguém conhece um comando ou alguma rotina para eu saber o nome do diretório q esta rodando meu programa ??

Enviado: 18 Set 2004 12:34
por Clipper
Use a DIRNAME() da LIB Clipper Tools.

Até logo.

Marcelo

Enviado: 18 Set 2004 12:39
por Dudu_XBase
(Y) Vlw Marcelo...lpasos de memória...rs...vou formatar minha hd aki...rs e instalar tudo de novo...

Enviado: 19 Set 2004 10:02
por ANDRIL
Ola dudu,

Utilizo o clipper52e e tem a função curdir() do proprio clipper.

Sintexe: CurDir("C:")

Retorno: C:\CLIPPER52\BIN este é o diretorio atual do meu programa.

Abraços!

Re: Saber diretório Atual

Enviado: 19 Set 2004 10:44
por Maligno
Dudu_XBase escreveu:Alguém conhece um comando ou alguma rotina para eu saber o nome do diretório q esta rodando meu programa ??
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.

[]'s
Maligno
http://www.buzinello.com/prg

Enviado: 19 Set 2004 12:37
por Dudu_XBase
(Y) obrigado Maligno vou utiliza-la ...vlw

Enviado: 19 Set 2004 20:39
por Clipper
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

Enviado: 19 Set 2004 21:35
por Maligno
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
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:

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

Enviado: 19 Set 2004 23:28
por Clipper
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

Enviado: 20 Set 2004 01:10
por Maligno
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
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 é.
mas há uma outra solução que é o uso da função EXENAME() da mesma Clipper Tools
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 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.
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.
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.

[]'s
Maligno
http://www.buzinello.com/prg

Enviado: 20 Set 2004 01:53
por Dudu_XBase
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.