PEGAR A LETRA OU CAMINHO UNICO DE ARQUIVO

NAUTILUZ 20/05/2010 17:26:11
#342320
Ola caros amigos
Tenho um HD dividido em dois, com 2 sistemas operacionais.
Quando alterno entre os sistemas a letra tambem alterna e asim C: vai pra D:
Gostaria de saber como pego a letra(ou caminho) do HD onde esta o arquivo independente do sistema ativado.

Ou pegar o Volume(ID) de cada partição e trasformar em letra da unidade?.

Citação:


Encontrei uma maneira que é mais fácil do que imaginava
Ao invés de encontra um meio de pegar a letra através do serial
Resolvi gravar o serial e depois fazer uma simples comparação rodando as letras das unidades a procura do Serial gravado com o serial retornado

Para pegar a letra usei este código simples usando FileSystemObject


Dim fso As New FileSystemObject
Dim Winchester As Scripting.Drive

Set Winchester = fso.getdrive([Ô]c[Ô])
Serial = Hex$(Winchester.SerialNumber)

[ô]Lembrando que para usar FileSystemObject e necesario incluir uma biblioteca do VB
No painel Projeto - Referancias - ative a opçao MICROSOFT SRIPTING RUNTIME

A lista de musicas ficou assim:

SerialdaUnidade+Diretório+Musica

Deste modo não importa em qual sistema eu entre o Serial sempre vai ser o mesmo.
Depois usei o código abaixo para rodar todas as unidade e encontra a letra do Serial gravado no Dir de cada musica

Private Declare Function GetLogicalDriveStrings Lib [Ô]kernel32[Ô] Alias [Ô]GetLogicalDriveStringsA[Ô] _
(ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

Function LetraUnidade(Serial As String) As String
Dim pos, ret As Integer
Dim Letra, TodosDrives As String

Dim fso As New FileSystemObject
Dim Winchester As Scripting.Drive

TodosDrives = Space(64)

ret = GetLogicalDriveStrings(Len(TodosDrives), TodosDrives)
TodosDrives = Left$(TodosDrives, ret)

Do
pos = InStr(TodosDrives, Chr(0))
If pos Then
Letra = Left(TodosDrives, pos - 1)
If Letra <> [Ô]A:\[Ô] And Letra <> [Ô]B:\[Ô] Then [ô]Ignora Disquetes
TodosDrives = Mid(TodosDrives, pos + 1, Len(TodosDrives))
Letra = Left(Letra, 1)
Set Winchester = fso.GetDrive(Letra)
If Serial = Hex$(Winchester.SerialNumber) Then LetraUnidade = Letra: Exit Function
End If
End If
Loop Until TodosDrives = [Ô][Ô]

End Function

Obrigado todos pela atenção.

A maior evolução se da onde não precisamos retornar a idade da pedra.!!!



EDERMIR 20/05/2010 17:49:20
#342322
Se você sabe o diretório então:

Wdir = DIR([Ô]C:\[Ô] & Wcaminho & [Ô]\[Ô] & Warquivo)

Em Wdir estará o nome do arquivo se existir. Se não existir, deve estar na outra unidade.
NAUTILUZ 20/05/2010 18:25:08
#342330
Não e bem o que procuro
Veja no caso de 3 partições C D E
Ativo o sistema em E, então onde iria o C
e tambem como saberia em outro PC com 3 ou 4 partições
com sistemas sabe la onde.
O que procuro e do tipo, Pegar o ID unico de cada partição
e em outro momento atraves deste ID de partição achar a letra da unidade.
JEANCOELHO 20/05/2010 21:41:39
#342347
ja tentou usar o volume do hd?
EDERMIR 21/05/2010 00:00:39
#342352
Então.... Faça um loop procurando a letra:

Wachei = 0
For Wx = 65 to 90
Wdir = DIR(asc(Wx) & [Ô]:\[Ô] & Wcaminho & [Ô]\[Ô] & Warquivo)
if Wdir = Warquivo then
Wachei = Wx
endif
next Wx
if Wachei = 0 then
Wtexto = [Ô]ARQUIVO NÃO ENCONTRADO[Ô]
else
Wtexto = [Ô]ARQUIVO ENCONTRADO NO DRIVE [Ô] & Wachei
endif
msgbox(Wtexto)
MSMJUDAS 21/05/2010 11:56:34
#342386
vTexto = Mid(App.Path, 1, 2) & Caminho & Arquivo
NAUTILUZ 21/05/2010 18:09:03
#342454
O codigo que procuro e pra dar suporte a uma PlayList
ou seja a lista pode ter varias musicas em diferentes partições
não da pra ficar procurando pela musica, tem que ter um modo direto de aceso tambem em outros sistemas.

Citação:

Como pegar o Volume(ID) de cada partição e trasformar em letra da unidade?

NAUTILUZ 23/05/2010 17:28:03
#342565
Citação:

Como pegar o Volume(ID) de cada partição e trasformar em letra da unidade?

MARCELO.TREZE 23/05/2010 19:22:38
#342570
Colega não entendi direito sua duvida, deixa eu falar o que entendi, o sistema está instalado em uma partição, e quando vc alterna entre os sistemas operacionais, esta partição muda a letra.

veja bem app.path deveria resolver o problema

arquivo = App.Path & [Ô]\Pasta_do_arquivo\seu_arquivo.txt[Ô]



assim seja lá qual for a unidade o programa irá funcionar perfeitamente.

isso pelo que entendi, agora se deseja um programa para procurar a letra da unidade de um certo arquivo, é outra história.



EDERMIR 23/05/2010 20:47:09
#342581
Citação:

:
... agora se deseja um programa para procurar a letra da unidade de um certo arquivo, é outra história.


Foi o que eu entendi.
PEGUDO 24/05/2010 10:41:29
#342604
Cara, acho que o FileSystemObjects lhe dará suporte para fazer o que você quer.
Estou em um computador se VB, por isso não posso te dar um exemplo concreto,
mas pesquise na internet que você vai encontrar exemplos legais.

abraços
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas