FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Fallo con la funci贸n WNetGetConnection()
Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM
Fallo con la funci贸n WNetGetConnection()
Posted: Tue Dec 02, 2008 01:14 AM
Saludos a toda la comunidad:.

Resulta que me encuentro haciendo pruebas con conecciones mediante redes locales y en una parte del c贸digo uso esta funcion, resulta que necesito saber el valor y la longitud que 茅sta devuelve, pero siempre es del tipo caracter y con longitud de 249, aunque la unidad a examinar sea local o en red:

Aki el fragmento de c贸digo... :-)

Function TipoRed()

LOCAL   cRuta:= GetModuleFilename(GetInstance()) 
LOCAL  cDrive:= ALLTRIM(UPPER(CurDrive()))+":"
LOCAL   cPath:= ALLTRIM(UPPER(WNetGetConnection(cDrive)))  //aki devuelve vacio en caso de ser disco local, o el nombre en caso de una unidad de red.
LOCAL    cRed:= ALLTRIM(UPPER(SUBSTR(cPath,1,2)))
LOCAL  cNomR1:= ALLTRIM(UPPER(SUBSTR(cPath,3)))
LOCAL  cNmRed:= SUBSTR(cNomR1,1,AT("\",cNomR1))

msginfo(cRuta)
msginfo(cDrive)
msginfo(cPath)
msginfo(VALTYPE(cPath),LEN(cPath))
msginfo(cRed)
msginfo(cNomR1)
msginfo(cNmRed)

Return nil


Es extra帽o, y creo que a la vez il贸gico, puesto que cuando la unidad a examinar es local o en red, cPath siempre devuelve el mismo valor.

He revizado la fuente en el archivo NET.C, y ahi declara un bufer de 249, pero no entiendo porque devuelve siempre el mismo valor.

Habra una forma de solucionar este problema, o alguna funcion que sustituya a WNetGetConnection()

Saludos y en espera de comentarios... :-)
Soluciones y Dise帽o de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Dise帽ador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
Posts: 310
Joined: Sun Jan 08, 2006 10:09 PM
Fallo con la funci贸n WNetGetConnection()
Posted: Tue Dec 02, 2008 01:29 AM
Esto te serve:

/*
 * ***** PC-Toledo snip by Toledo ******
 */
#include "FiveWin.ch"

function Main()
   LOCAL cDrive, i, cServer
   FOR i:=1 TO 26
      cDrive := Chr(64+i) + ":"
      cServer := NetRmtName( cDrive )
      IF !Empty( cServer )
         ? cDrive, cServer
      ENDIF
   NEXT
RETURN


Agrega CT.LIB de http://www.5volution.com/forum/ct.lib.zip (renomear a CT.LIB)

Minha ideia:
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 ""


Uso:
GetDrvMapLetter( "\\MyServer\MyPC\C" )
Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM
Fallo con la funci贸n WNetGetConnection()
Posted: Tue Dec 02, 2008 03:57 PM
Rochinha Gracias por contestar

En un momento hago pruebas con la segunda opcion que me das, te comento que en la primera, no puedo hacer las pruebas porque el enlace a la libreria que indicas ya no funciona.

Ser铆a posible que me enviaras la libreria a mi correo.. danyleon82@hotmail.com :-) :-)

Te lo agradecer铆a mucho. :-)

Saludos..



Maestro Antonio:

Alguna idea de que puedo hacer para poder solucionar el problema..?

Muy Agradecido...
Soluciones y Dise帽o de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Dise帽ador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
Posts: 94
Joined: Tue Mar 28, 2006 04:09 PM
Fallo con la funci贸n WNetGetConnection()
Posted: Tue Dec 02, 2008 04:36 PM

Probado y funciona solo hay que ponerle un exit para que se rompa el bucle de no ser asi nos regresa en blanco..

Saludos

P.D. Ah y la libreria CT.LIB esta en xharbour/lib no se si este en harbour...

Luis Fernando Rubio Rubio
Posts: 94
Joined: Tue Mar 28, 2006 04:09 PM
Fallo con la funci贸n WNetGetConnection()
Posted: Tue Dec 02, 2008 04:47 PM
Hola a todos, una correccion si no le pongo el lower en la comparacion no me da la unidad correctamente..


function GetDrvMapLetter( cPathName )
   LOCAL cDrive, i, cServer

   FOR i = 1 to 26
       cDrive  := chr(64 + i) + ":"
       cServer := NetRmtName( cDrive )
       IF alltrim( lower(cPathName) ) == alltrim( lower(cServer) )
          return cDrive
          exit
       ENDIF
   NEXT
   return ""
Luis Fernando Rubio Rubio
Posts: 94
Joined: Tue Mar 28, 2006 04:09 PM
Fallo con la funci贸n WNetGetConnection()
Posted: Tue Dec 02, 2008 04:56 PM
Bueno y ya entrando a detalle, de que eran unas funciones que hace un buen tiempo necesitaba, ahora las modifique un poco, y aqui les dejo los cambios

function cDrvMapToLetter( cPathName )
   LOCAL cDrive, i, cServer

   FOR i = 1 to 26
       cDrive  := chr(64 + i) + ":"
       cServer := NetRmtName( cDrive )
       IF alltrim( lower(cPathName) ) == alltrim( lower(cServer) )
          return cDrive
          exit
       ENDIF
   NEXT
   return ""

function cLetterToDrvMap( cLetter )
return( NetRmtName( upper(cLetter) ) )


A ver si como dice RF no estoy matando pulgas a ca帽onzos..

Felices Fiestas
Luis Fernando Rubio Rubio
Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM
Fallo con la funci贸n WNetGetConnection()
Posted: Tue Dec 02, 2008 10:13 PM

Gracias a ambos por contestar:

Quedo solucionado el problema..

Un Saludo.

Soluciones y Dise帽o de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Dise帽ador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
Posts: 310
Joined: Sun Jan 08, 2006 10:09 PM
Fallo con la funci贸n WNetGetConnection()
Posted: Wed Dec 03, 2008 07:33 AM
Ahora el enlace funciona perfecto.

Derpitu, revisa esto:
derpipu wrote:
...
function GetDrvMapLetter( cPathName )
   LOCAL cDrive, i, cServer

   FOR i = 1 to 26
       cDrive  := chr(64 + i) + ":"
       cServer := NetRmtName( cDrive )
       IF alltrim( lower(cPathName) ) == alltrim( lower(cServer) )
          return cDrive 
          exit // ***** esto no funciona, RETURN termina el processo *****
       ENDIF
   NEXT
   return ""

...

Continue the discussion