Fallo con la función WNetGetConnection()

Fallo con la función WNetGetConnection()

Postby cuatecatl82 » Tue Dec 02, 2008 1: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... :arrow:

Code: Select all  Expand view
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... :wink:
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
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Postby Rochinha » Tue Dec 02, 2008 1:29 am

Esto te serve:

Code: Select all  Expand view
/*
* ***** 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:
Code: Select all  Expand view
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" )
Last edited by Rochinha on Wed Dec 03, 2008 7:28 am, edited 1 time in total.
Rochinha
 
Posts: 310
Joined: Sun Jan 08, 2006 10:09 pm
Location: Brasil - Sao Paulo

Postby cuatecatl82 » Tue Dec 02, 2008 3: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 :oops: :oops:

Te lo agradecería mucho. :lol:

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
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Postby derpipu » Tue Dec 02, 2008 4: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
derpipu
 
Posts: 94
Joined: Tue Mar 28, 2006 4:09 pm
Location: Tequila, Jalisco Mexico

Postby derpipu » Tue Dec 02, 2008 4:47 pm

Hola a todos, una correccion si no le pongo el lower en la comparacion no me da la unidad correctamente..


Code: Select all  Expand view
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
derpipu
 
Posts: 94
Joined: Tue Mar 28, 2006 4:09 pm
Location: Tequila, Jalisco Mexico

Postby derpipu » Tue Dec 02, 2008 4: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

Code: Select all  Expand view
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
derpipu
 
Posts: 94
Joined: Tue Mar 28, 2006 4:09 pm
Location: Tequila, Jalisco Mexico

Postby cuatecatl82 » 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
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Postby Rochinha » Wed Dec 03, 2008 7:33 am

Ahora el enlace funciona perfecto.

Derpitu, revisa esto:
derpipu wrote:...
Code: Select all  Expand view
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 ""

...
Rochinha
 
Posts: 310
Joined: Sun Jan 08, 2006 10:09 pm
Location: Brasil - Sao Paulo


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 48 guests