Página 2 de 3
Enviado: 07 Nov 2007 08:32
por Pablo César
Maligno escreveu:Essas opções mostram o local onde o SO foi instalado.
Sim claro, assim deveria ser. Mas a minha perguta está baseada na posibilidade de que o usuário tenha instalado duas vezes o Windows. Um na unidade C: e outro na D: (digamos assim). Daí o que eu quero saber se o WAPI iria apresentar a unidade e pasta correta conforme a que está vigente. Ou simplesmente o WAPI irá dar o PRIMEIRO resultado (isto é: na unidade C:)
Maligno escreveu:O que o Junior está questionando é: como saber qual a letra do PRIMEIRO volume da máquina, independentemente de onde está o SO ou o drive corrente.
Bem não foi isso que entendí, ora porque em nenhum momento o junior utilizou a plavra PRIMEIRO.
Lá vamos nós... (com especulações). Digamos que é isso que o colega quer saber, a primeira letra disponível. Então seria somente fazer uma rotininha assim:
Código: Selecionar todos
VUNID:={}
FOR I=65 TO 90
IF DRIVETYPE(VVOL)=3
AADD(VUNID,CHR(I)+":")
ENDIF
NEXT
? VUNID[1]
Enviado: 07 Nov 2007 08:35
por Pablo César
Entretanto, em se tratando de arquivos temporários, a melhor coisa a fazer é esquecer a rede.
Concordo com você e inclusive a sua indicação dada na mensagem anterior (também estou de acordo). Mas a questão de arquivos temporários talvez não seja o único problema do colega Junior.
Enviado: 07 Nov 2007 08:39
por Maligno
Ou simplesmente o WAPI irá dar o PRIMEIRO resultado (isto é: na unidade C:)
A função GetSysInfo() informará sempre o que se refere ao Windows instalado e correntemente em uso.
Bem não foi isso que entendí, ora porque em nenhum momento o junior utilizou a plavra PRIMEIRO.
O título do tópico é: "Como saber a letra da unidade
raiz da maquina? Por raiz, entende-se primeiro. Não é?
Então seria somente fazer uma rotininha assim:
Eu tinha visto essa função, que aliás eu nunca usei, mas o NG diz que, para qualquer partição e discos "indisponíveis" (leia-se inexistentes), ela sempre retornará zero. Não testei, mas se for isso mesmo, não serve.
Mas ainda acho que o melhor caminho é esquecer isso e partir para uma outra alternativa. Melhor do que ficar quebrando a cabeça pra resolver uma esquisitice.
Enviado: 07 Nov 2007 08:41
por Maligno
Mas a questão de arquivos temporários talvez não seja o único problema do colega Junior.
Se tivesse mais alguma coisa, acredito que ele diria. Mas o problema, a princípio, é só com os temporários. Agora, também não adianta nada ficarmos especulando sobre os problemas dos outros.

Enviado: 07 Nov 2007 09:09
por juniorcamilo
Olha amigos.. eu fiz a pergunta para realmente saber a unidade padrao, a RAIZ, pois em certas ocasioes eu gravo arq. temp na maquina operante, para evitar trafego na rede e possivel queda de HUB e tampem para maior rapidez na resposta...
Enviado: 07 Nov 2007 09:10
por Pablo César
hehe... assim nós vamos assustar alguns colegas... Até parece que nós estariamos brigando, não é ?... hihihi Falo isto porque ja ví tópico finalizando:
Ja resolví. Obrigado X, Y e Z
O que não se tem em conta que mesmo nas nossas especulações (o que o autor quiz dizer... e assim por diante) é que enriquecemos várias idéias e na minha opnião todo programador é um convisto a ter sempre a razão. Dificilmente um de nós aceite o erro ou até fica por eu disse... Mas o que vale ao final das contas é a ajuda prestada e a mastigação de diversos assuntos.
Mas finalizando... hihi
Maligno escreveu:Não testei, mas se for isso mesmo, não serve.
Bem pra você não serve ora para mim SERVE e muito bem "graças a Deus". Agora se servirá para o colega Junior ainda não sabemos. Como você mesmo disse não adianta nada ficarmos especulando sobre outros assuntos. Pois na falta de maiores definições dá lugar a outras possibilidades e pelo visto Maligno a tua sempre é a que tem lugar... não é ? Mas eu perdo-o porque você... hehe
Enviado: 07 Nov 2007 09:13
por Maligno
Se você não usa Terminal Service, meu conselho é gravar seus temporários no diretório temporário do próprio Windows, ao invés de tentar descobrir qual o primeiro volume do HD. Mais prático e mais rápido.
Enviado: 07 Nov 2007 09:17
por Maligno
Pablo César escreveu:Bem pra você não serve ora para mim SERVE e muito bem "graças a Deus".
Você não me entendeu. Eu disse que,
conforme o NG informa, essa função DriveType() sempre retornará
zero para volumes e drives inexistentes. Complementei: nunca testei, mas
SE FOR isso mesmo, não servirá para determinar qual o primeiro volume do HD. Entendeu agora?
Enviado: 07 Nov 2007 09:20
por Pablo César
juniorcamilo escreveu:Olha amigos.. eu fiz a pergunta para realmente saber a unidade padrao, a RAIZ
Desculpe Junior, mas para mim RAIZ é o diretório principal (que não tem nome algum como nome de pasta).
juniorcamilo escreveu:eu gravo arq. temp na maquina operante, para evitar trafego na rede e possivel queda de HUB e tampem para maior rapidez na resposta...
ok, bem feito. Mas além dos arquivos temporários, existe alguma outra razão no seu sistema para saber qual é a unidade ? Porque imaginei que você teria outras razões para abertura do seu novo tópico. Pois eu por exemplo gravo assim como você (e outros colegas) os arquivos temporários na máquina local e para isto preciso saber a unidade. Vai que a unidade do servidor não seja "C:" ou até para diferenciar se é uma estação ou servidor. Claro que esse exemplo que eu passei ainda pode ser melhorado. Mas a propósito: testou a minha indicação ?
Enviado: 07 Nov 2007 09:48
por Pablo César
É dificil Maligno entender a sua colocação. Mas imagino entender ao que você disse de que o meu primeiro exemplo não serve e sim o meu segundo para essa questão de saber o primeiro drive da unidade (segundo você). E se eu dissese que as duas indicações minhas compõe o certo ?. Ora porque eu mencionei que a idéia podia ser melhorada.
Digo segundo você, ora porque se eu quiser definir o caminho completo (com drive da unidade) de onde irei gravar os meus temporários, irei precisar a unidade atual onde o sistema está, certo ?. Então baseando-me no exemplos dados:
Código: Selecionar todos
VVOL:=SUBSTR(ALLTRIM(EXENAME()),1,2) /* Aqui pega a unidade onde se encontra o aplicativo*/
IF VVOL="C:"
XVOL:="C:" /* Aqui ja diz que se for o servidor e for C: então ficará como C: mesmo*/
ELSE
IF DRIVETYPE(VVOL)=3
XVOL:=VVOL /* Aqui estou aceitando a unidade que sendo como unidade LOCAL e não de REDE, como a unidade em que está sendo enxergada de acordo onde está o aplicativo*/
ELSE
[ XVOL:="C:" ] /* E é aqui onde eu iria introduzir a minha segunda sugestão, porque ora vai que essa estação não possua a unidade C: e eu embora errado estaria "forçando" a que seja como "C:" (assim como o colega indicou) ou ora porque é uma estação DISKLESS. Então caberia verificar isso, se existe a unidade "C:" e caso contrário qual seria a primeira unidade disponível. Então a linha entre colchetes acima, deveria ser substituida como a seguir:*/
VUNID:={}
FOR I=65 TO 90
IF DRIVETYPE(VVOL)=3
AADD(VUNID,CHR(I)+":")
ENDIF
NEXT
XVOL:=VUNID[1]
ENDIF
ENDIF
Mas não pára por aqui. Você deveria também verificar se o diretório onde você pensa gravar os temporários existe ou então terás que criá-lo. Tudo irá depender se você está apontando para a gravação no diretório TEMP do WINDOWS ou alguma outra pasta específica.
Enviado: 07 Nov 2007 09:56
por Maligno
Volto a repetir: eu apenas comentei sobre o quê o NG informa. É ele quem diz. Não eu. Agora, se você realmente testou este código e ele funcionou, ótimo. Nem vou me alongar mais nesse assunto.
Mas,...
Não seria mais fácil usar GetEnv("TEMP") + "\TEMP.$$$" para montar o caminho de gravação de um temporário, aproveitando que o SO já define essa variável de ambiente? Mata o problema de forma bem mais prática, não?
Enviado: 07 Nov 2007 10:33
por Pablo César
Maligno escreveu:Volto a repetir: eu apenas comentei sobre o quê o NG informa. É ele quem diz. Não eu. Agora, se você realmente testou este código e ele funcionou, ótimo. Nem vou me alongar mais nesse assunto.
Pois eu ja disse que funciona.
Maligno escreveu:Não seria mais fácil usar GetEnv("TEMP") + "\TEMP.$$$" para montar o caminho de gravação de um temporário, aproveitando que o SO já define essa variável de ambiente? Mata o problema de forma bem mais prática, não?
Taí uma solução muito eficaz e prática. Sabia que eu ainda iria obter uma definição melhor apara arquivos temporários. Mas ainda irei utilizar a minha rotina, porque eu a utilizo para outras finalidades que não são referente a criação de arquivos temporários. Uma das necessidades é isentar a verificação nº do HD para a estações. Ora porque se o sistema está instalado no servidor é somente no servidor que tem que verificar o HD. Também sei que apenas o nº do HD para contra-pirataria, não é suficiente, mas quem sabe eu tenha uma forma COMPOSTA de fazer tal verificção.
Valeu Maligno, acho que foi um ótima indicação a sua sobre TEMP.
Enviado: 07 Nov 2007 11:03
por DMR
Eu utilizo o GetEnv() e nunca tive problemas com arquivos temporários.
s
Enviado: 08 Nov 2007 07:19
por juniorcamilo
Amigo Pablo.. qual a lib para DRIVETYPE()???
Enviado: 08 Nov 2007 08:08
por Pablo César
O DRIVETYPE() faz parte do "Disk utilities" da CA-TOOLS (CT.LIB) e funciona bem. Experimente e nos diga se deu resultado e cómo foi utilizado.