Curdir() e CurDrive() na rede não retorna letra correta?

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Curdir() e CurDrive() na rede não retorna letra correta?

Mensagem por rochinha »

Amiguinhos,

Coisa louca aconteceu comigo estes dias. Nunca tive este problema no XP mas no Windows 7 em diante tá acontecendo o seguinte:

Tenho duas maquinas A(cliente) e B(servidora)

-Em B(servidora) compartilhei a pasta sistema e dei todos as permissões possíveis.
-Em A(cliente) encontrei a maquina tanto via \\192.168.1.100\c quanto via \\SuperServer\c e fiz o mapeamento para as letras S: e Y: respectivamente.
-Em meu código coloquei:

Código: Selecionar todos

   Set Default to &(cPathDados)
   if file( "controle.dbf" )
       ?"encontrei com set default",curdir(),curdrive()
   else	   
       ?"nao encontrei com set default",curdir(),curdrive()
   endif
   
   lCHDIR( cPathDados )
   if file( "controle.dbf" )
       ?"encontrei com lCHDir",curdir(),curdrive()
   else	   
       ?"nao encontrei com lCHDir",curdir(),curdrive()
   endif
Me é retornado:

Código: Selecionar todos

       nao encontrei com set default
       \192.168.1.100\c\sistema
       \

Código: Selecionar todos

       nao encontrei com lCHDir
       \192.168.1.100\c\sistema
       \
Em nenhum dos casos me retornou a letra S: ou Y: e os comandos de abertura estão falhando acusando DOS ERROR 3.

Se alguém tiver uma idéia que não seja mudar de Harbour, ka, ka, ka, agradeço.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Curdir() e CurDrive() na rede não retorna letra correta?

Mensagem por JoséQuintas »

Criou o atalho pela pasta normal, e não pela pasta mapeada?

e/ou... chdir() só altera o diretório, e não a letra. faltou chdrive()
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Curdir() e CurDrive() na rede não retorna letra correta?

Mensagem por asimoes »

Rochinha,

Pode usar também:
HB_CWD() que no harbour substitui o DIRCHANGE()

Está no changelog

added support for setting new working directory (and drive)
by HB_CWD( <cNewWD> )
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Curdir() e CurDrive() na rede não retorna letra correta?

Mensagem por rochinha »

Amiguinhos,

Estou de volta para dar o respaldo e minha solução.

Rodei a internet inteira por 2 dias, caçando códigos, scripts em vb e java, php, pog e olhem onde fui parar, mundo pequeno.

Bom o fato é que encontrei o que eu queria, que seria uma função que me retornasse a letra mapeada de um endereço UNC qualquer. Exemplo: Que letra foi mapeada para \\servidor\c\sistema?

Pois bem, em minhas andanças encontrei:

Código: Selecionar todos

function GetDrvMapLetter( cPathName )
   LOCAL cDrive, i, cServer
   FOR i = 1 to 26
       cDrive  := chr(64+i) + ":"
       cServer := NetRmtName( cDrive )
       IF alltrim( cPathName ) == alltrim( cServer )
          return cDrive
       ENDIF
   NEXT
   return ""
Problema resolvido. Só que Não. Apesar de ter a biblioteca ct.lib anexada na compilação a função NetRmtName() não retornou nem um AI!.

Bom precisava resolver meu problema de rede que nem era meu e sim do Windows, então verificando alguns vbscripts montei um que me atendeu:

Código: Selecionar todos

function GetDrvMapLetter( strLocalDrive ) // UNC path
	local aGetDrvMapLetter := {}
    local objNetwork := TOLEAuto():New( "WScript.Network" )
    local objDrives   := objNetwork:EnumNetworkDrives()
    local i := 0
    If objDrives:Count > 0
        do while i < objDrives:Count
             if !empty( strLocalDrive )
                if upper( objDrives:Item(i+1) ) = upper( strLocalDrive )
                   aGetDrvMapLetter := { objDrives:Item(i), objDrives:Item(i+1) }
				   exit
                endIf
             else
                aadd( aGetDrvMapLetter, { objDrives:Item(i), objDrives:Item(i+1) } )
             endif
             i=i+2
        enddo	
    EndIf 
    return aGetDrvMapLetter
Seu uso é simples:

Código: Selecionar todos

? len( GetDrvMapLetter( "\\lenovo-pc\_drive_e" ) )

? len( GetDrvMapLetter() )

? len( GetDrvMapLetter( "\\lenovo-pc\g" ) )
Lógico que esta é a versão 0.0000001 e pode melhorar, mas me quebrou o galho de saber a letra do mapeamento.

Quem tiver algo semelhante em Harbour pode indicar e acescentar ao tópico. Se estiver em C também serve.

Fica a Dica.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Curdir() e CurDrive() na rede não retorna letra correta?

Mensagem por alxsts »

Olá!

Não acha interessante sugerir a criação desta funcionalidade ao grupo do Harbour e Viktor?
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

Curdir() e CurDrive() na rede não retorna letra correta?

Mensagem por ANDRIL »

Já tinha tentando através do NET USE saber os mapeamentos ativos no PC? Lendo o resultado dele daria para 'bolar' o retorno desejado, ou não?
Até+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Curdir() e CurDrive() na rede não retorna letra correta?

Mensagem por rochinha »

Amiguinhos,
Olá!
Não acha interessante sugerir a criação desta funcionalidade ao grupo do Harbour e Viktor?
Acho até que já exista. A minha fonte de pesquisa geralmente era baseada no site harbour.vouch.info que foi hackeado.
Já tinha tentando através do NET USE saber os mapeamentos ativos no PC? Lendo o resultado dele daria para 'bolar' o retorno desejado, ou não?
Até+
Nem me passou pela cabeça, pois a cada minuto era um telefonema de cliente dizendo, não tá entrando...

O problema de mapeamentos está relacionado as redes sob Windows 7 em diante, por causa da segurança a nível de usuário. Mapeamentos criados sob um usuário não são visíveis a outros e quando visíveis as restrições não permitem o bom executar dos acessos a .DBF que não trabalham bem sob endereços UNC. Tipo \\maquina\etc.

O Windows me pregou uma peça. Teve a paxorra de me dizer que eu estava digitando o nome de um executável errado ou inexistentes sendo que eu estava dentro da pasta do mesmo.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
rbonotto
Usuário Nível 3
Usuário Nível 3
Mensagens: 253
Registrado em: 06 Mai 2005 18:52

Curdir() e CurDrive() na rede não retorna letra correta?

Mensagem por rbonotto »

Tive um problema parecido, rosolvi de uma forma bem simples e um pouco no susto.
No pc cliente além do mapeamento faço a conexão da unidade de rede atribuindo sempre a letra S

Quem sabe...
mixsistemas@gmail.com
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Curdir() e CurDrive() na rede não retorna letra correta?

Mensagem por rochinha »

Amiguinhos,

Resolvi o problema com as funções que postei mas também de outra forma.

Ativei o Administrador escondido do Windows e pronto.

net user administrador active:yes

Deixei o usuário administrador ativo e os problemas com mapeamentos, etc, sumiram e o cliente parou de me pentelhar.

Lógico que isto libera a segurança, mas parte do meu serviço de suporte é a manutenção preventiva semanal.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

Curdir() e CurDrive() na rede não retorna letra correta?

Mensagem por HASA »

:?
Cuidado com esse comando
net user administrador active:yes
em máquinas com Win/xp, se ela foi formatada sem criar a senha do administrador a mer... ta feita, não passaras da tela de login ok.
- CUIDADO....
:)Pos
HASA
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Curdir() e CurDrive() na rede não retorna letra correta?

Mensagem por rochinha »

Amiguinhos,
Cuidado com esse comando
ka, ka, ka.

Sei disto amiguinho, mas o cliente tava me enxendo o saco.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder