Página 1 de 3

Como saber a letra da unidade raiz da maquina?

Enviado: 07 Nov 2007 07:37
por juniorcamilo
Amigos me deparei com um caso q nunca tinha visto, sempre soube que poderia ser possivel, fiz diversas rotinas de arquivos temporarios gravar na raiz da maquina local, mas em um determinado cliente alguem particionou o HD começando com a letra H: ,rsrsrrs, ai as diversas rotina nao funciona, oq fazer?

Enviado: 07 Nov 2007 07:44
por Maligno
O sujeito deve ter tido um motivo muito especial pra fazer uma coisa tão esquisita como essa. Ou ele tem "casco". :)))

A determinação das letras dos drives é feita pelo sistema operacional. No XP, que é o que eu uso, é só ir no Painel de Controle e executar o "Gerenciamento do Computador". Nas outras versões eu não conheço.

Agora, se quiser determinar qual é o drive padrão para o SO, você pode testar (também no XP) a variável de ambiente "SystemDrive".

Enviado: 07 Nov 2007 07:53
por DMR
Bom dia !

Não sei se é isso que precisa, mas a função Diskname() retorna o drive corrente do DOS.

Espero ter ajudado

Enviado: 07 Nov 2007 08:00
por Pablo César
Eu tive umas experiência similar e resolví fazer isto:

Código: Selecionar todos

VVOL:=SUBSTR(ALLTRIM(EXENAME()),1,2)
IF VVOL="C:"
   XVOL:="C:"
ELSE
   IF DRIVETYPE(VVOL)=3
      XVOL:=VVOL
   ELSE
      XVOL:="C:"
   ENDIF
ENDIF
Neste exemplo eu forço a unidade para a letra "C:" que é a que todo mundo deveria ter. Mas quando a unidade do HARD-DISK for outra que não seja "C:" então assumirá a letra que corresponder. Isto porque numa rede, a coisa é diferente. Teste esse exemplo, mas não esqueça de fornecer o caminho onde se encontram os arquivos juntamente com a variável "XVOL" que contém a letra da unidade.

Por exemplo:

Código: Selecionar todos

IF FILE( XVOL+"LOCA.CFG" )
E para verificar se é servidor, por exemplo:

Código: Selecionar todos

   IF !(DISKNAME()=SUBSTR(XVOL,1,1))
      VTERM=GETENV("TERMINAL")
      IF EMPTY(ALLTRIM(VTERM))
         VTERM=UPPER(NETNAME())
      ENDIF
   ELSE
      VTERM="SERVIDOR"
   ENDIF

Enviado: 07 Nov 2007 08:02
por Maligno
Não sei se é isso que precisa, mas a função Diskname() retorna o drive corrente do DOS.
Mas lembre-se que nem sempre o drive corrente é o primeiro drive da máquina. Essa é a questão do colega.

Aliás, corrigindo/complementando minha mensagem anterior: nem sempre o sistema operacional está instalado no primeiro drive da máquina. E levando-se em conta a esquisitice da coisa, realmente não dá pra confiar. :)

Enviado: 07 Nov 2007 08:05
por Maligno
Pablo César escreveu:Eu tive umas experiência similar e resolví fazer isto:
Mas essa função não ajuda a determinar QUAL o primeiro drive da máquina.

Enviado: 07 Nov 2007 08:06
por Pablo César
nem sempre o sistema operacional está instalado no primeiro drive da máquina.
Para esses casos o WAPI iria apresentar o drive em que o SO está instalado ?

Enviado: 07 Nov 2007 08:07
por Maligno
Para esses casos o WAPI iria apresentar o drive em que o SO está instalado ?
Sim, mas o local onde o SO foi instalado pode ser outro que não o primeiro drive disponível. É a mesma situação da variável de ambiente "SystemDrive". O Junior quer saber qual o primeiro drive da máquina. Esse é o problema.

Enviado: 07 Nov 2007 08:08
por Pablo César
Mas essa função não ajuda a determinar QUAL o primeiro drive da máquina.
Claro que SIM. Não determina qual é o drive da máquina que o SO está instalado, mas determina qual é o drive da máquina em que se encontra posicionado.

Enviado: 07 Nov 2007 08:09
por Maligno
mas determina qual é o drive da máquina em que se encontra posicionado.
Foi isso o que o Junior perguntou?

Enviado: 07 Nov 2007 08:14
por Pablo César
mas o local onde o SO foi instalado pode ser outro que não o primeiro drive disponível
Quer dizer então que a GETSYSTEMINFO (item 3 e 4 por exemplo) do WAPI iria mostra o primeiro drive e não onde ele está valendo ?

Enviado: 07 Nov 2007 08:16
por Maligno
Quer dizer então que a GETSYSTEMINFO (item 3 e 4 por exemplo) do WAPI iria mostra o primeiro drive e não onde ele está valendo ?
Essas opções mostram o local onde o SO foi instalado. Mas isso não quer dizer nada. Não serve. Tampouco serve saber qual o drive corrente. 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.

Enviado: 07 Nov 2007 08:19
por Maligno
juniorcamilo escreveu:fiz diversas rotinas de arquivos temporarios gravar na raiz da maquina local, mas em um determinado cliente alguem particionou o HD começando com a letra H: ,rsrsrrs, ai as diversas rotina nao funciona, oq fazer?
Aliás, se quiser esquecer essa questão de primeiro volume do HD e apenas resolver o problema dos arquivos temporários, pode fazer como eu: gravar os temporários num diretório TEMP dentro do diretório de instalação do seu próprio programa. Acho que fica mais fácil e correto do que quebrar a cabeça pra resolver as esquisitices dos outros.

Ou, alternativamente, usar o diretório que o próprio Windows usa, lendo uma das variáveis de ambiente que ele cria: "TEMP", "TMP" ou "TMPDIR".

Enviado: 07 Nov 2007 08:23
por Pablo César
Maligno escreveu:
mas determina qual é o drive da máquina em que se encontra posicionado.
Foi isso o que o Junior perguntou?
Não sei se é porque são as primeiras horas de quando a gente acorda ou é que você não está entendendo...

Desculpe se pareço rude outra vez, meu caro colega: mas quem deveria dizer se serve é o JuniorCamilo, pois eu lancei uma possível solução. Cabe ele verificar se serve ou até mesmo podendo ser adaptada. Tudo irá depender de como é a situação:

- Se o sistema está em rede
- Se a máquina em questão é a do SERVIDOR
- Se o mapeamento é fixo
- Se se posiciona na unida e diretório onde o aplicativo se encontra

Enfim, tem muitas formas de se fazerem as coisas. Lembro da idéia do colega Eolo que mesmo em rede existem os executáveis em cada máquina. Daí, não tenho experiência sobre essa outra questão.

Mas em definitiva Maligno, o que o colega disse:
fiz diversas rotinas de arquivos temporarios gravar na raiz da maquina local, mas em um determinado cliente alguem particionou o HD começando com a letra H: ,rsrsrrs, ai as diversas rotina nao funciona, oq fazer
Siginifica que ele tem funções que direcionam para um drive fixo ou limitado (de tal a tal unidade) e que não está funcionando. Portanto eu considero que o problema está porque a unidade não é a padrão e o aplicativo não funciona. E eu parto pelo principio em que DEVE se posicionar na unidade e pasta onde o aplicativo (do SERVIDOR) se encontra.

Enviado: 07 Nov 2007 08:30
por Maligno
Me ative à responder à questão do colega: saber qual o PRIMEIRO volume da máquina. Entretanto, em se tratando de arquivos temporários, a melhor coisa a fazer é esquecer a rede. Não é prudente usar a rede para fazer trafegar arquivos temporários. É um desperdício de banda. Então, desconsiderando a questão rede, a minha sugestão faz sentido.

Ainda assim, repito: a questão dele é sobre a forma de determinar qual o PRIMEIRO volume do disco. Logo, repito: sua função não serve.

Mas, como eu disse antes: particularmente, eu preferiria esquecer essa questão e usar uma alternativa para direcionar os arquivos temporário, sempre em drive local. Nunca em rede. Daí minhas duas sugestões: usar um diretório fixo ou usar o diretório definido pelo próprio Windows.

Em tempo: quando eu disse que uso meu TEMP, esqueci de dizer que sempre tenho um diretório fixo no HD local. Nunca uso rede pra isso.