Como saber a letra da unidade raiz da maquina?

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem 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]
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem 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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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. :)
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
juniorcamilo
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 10 Nov 2006 09:12
Localização: Pará

Mensagem 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...
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem 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
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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?
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem 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 ?
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem 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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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?
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem 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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
DMR
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 03 Out 2007 09:15
Localização: Porto Ferreira-SP

Mensagem por DMR »

Eu utilizo o GetEnv() e nunca tive problemas com arquivos temporários.
Avatar do usuário
juniorcamilo
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 10 Nov 2006 09:12
Localização: Pará

s

Mensagem por juniorcamilo »

Amigo Pablo.. qual a lib para DRIVETYPE()???
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem 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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Responder