Autor Tema: Enumerar carpetas de una carpeta compartida  (Leído 4960 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Psyke1

  • Megabyte
  • ***
  • Mensajes: 130
  • Reputación: +11/-7
  • VBManiac
    • Ver Perfil
    • h-Sec
Enumerar carpetas de una carpeta compartida
« en: Noviembre 26, 2012, 06:36:43 am »
Me estoy volviendo loco... :huh:
Necesito extraer todas las carpetas que contenga la carpeta compartida "\\micarpeta\".
Tan sólo para saber si existe ya he tenido problemas puesto que devuelve false utilizando métodos tradicionales. Eso lo he solucionado con api PathIsNetworkPath().

En cambio puedo listar las carpetas de una subcarpeta suya:
Código: (vb) [Seleccionar]
Private Sub Form_Load()
    Dim f As Object, s
   
    Set f = CreateObject("Scripting.FileSystemObject")
   
    For Each s In f.GetFolder("\\micarpeta\hola").SubFolders
        MsgBox s
    Next
End Sub

He encontrado los apis WNetEnumResource(), WNetOpenEnum(), WNetCloseEnum(), WNetOpenEnum().
Código: [Seleccionar]
http://allapi.mentalis.org/apilist/2AA74BB4AC857C52AD4BC7FA9E4DB1B7.html
Pero es extremaaaaaadamente lento... :(
Así que me comprometo a levantar un monumento a quién me sepa guiar/dar una solución. :-*

DoEvents! :P
« última modificación: Noviembre 26, 2012, 09:19:19 am por Psyke1 »

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Enumerar carpetas de una carpeta compartida
« Respuesta #1 en: Noviembre 26, 2012, 10:17:56 am »
Probaste si haciendo directamente desde el explorer es lento?

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Enumerar carpetas de una carpeta compartida
« Respuesta #2 en: Noviembre 26, 2012, 10:41:04 am »
No te sirve asi, comproba si un archivo existe dentro de una carpeta compartida.

Como Referencia: Microsoft Scripting Runtime

Código: (VB) [Seleccionar]
Private Sub Command1_Click()
   
    Dim objFSO As New FileSystemObject
   
    If objFSO.FileExists("\\CENTRAL\FOLDER\archivo.txt") Then
        Debug.Print "existe"
    Else
        Debug.Print "no existe"
    End If
   
End Sub
« última modificación: Noviembre 26, 2012, 10:45:58 am por E N T E R »
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

Psyke1

  • Megabyte
  • ***
  • Mensajes: 130
  • Reputación: +11/-7
  • VBManiac
    • Ver Perfil
    • h-Sec
Re:Enumerar carpetas de una carpeta compartida
« Respuesta #3 en: Noviembre 26, 2012, 12:11:06 pm »
@raul
Qué va, de ese modo es instantáneo.

Me puse a mirar el código de allapi y mira:
Código: (vb) [Seleccionar]
Private Const RESOURCE_ENUM_ALL As Long = &HFFFFDa una cantidad de vueltas brutal... D;

@Enter
Me temo que eso no es lo que busco, amigo.

DoEvents! :P

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Enumerar carpetas de una carpeta compartida
« Respuesta #4 en: Noviembre 26, 2012, 02:54:33 pm »
Hola Psykey, no tengo para provarlo en red, ya que soy duro para aprenderlo  XD, pero fijate si con el objeto Shell es mas rapido, en teoría es igual que el explorer.

Código: (VB) [Seleccionar]
Option Explicit

Private Sub Form_Load()
    Dim oShell As Object
    Dim OrigItem As Object
    Dim DestItem As Object
   
    Set oShell = CreateObject("Shell.Application")
   
    For Each OrigItem In oShell.NameSpace(CVar("\\PC\Mi música")).Items
        Debug.Print OrigItem.Name
    Next

End Sub

Saludos.

Psyke1

  • Megabyte
  • ***
  • Mensajes: 130
  • Reputación: +11/-7
  • VBManiac
    • Ver Perfil
    • h-Sec
Re:Enumerar carpetas de una carpeta compartida
« Respuesta #5 en: Noviembre 26, 2012, 03:04:24 pm »
¡Funciona! :o

Gracias
Jajajajajaja ¡TE ODIO!  >:(  ;D

Mira lo que había hecho:
Código: [Seleccionar]
http://foro.elhacker.net/programacion_visual_basic/src_getsharesubfolders-t377004.0.html;msg1804532#msg1804532
¬¬"!



EDIT:
Añadí una función utilizando tu método.  :)

DoEvents! :P
« última modificación: Noviembre 26, 2012, 03:23:03 pm por Psyke1 »

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Enumerar carpetas de una carpeta compartida
« Respuesta #6 en: Noviembre 26, 2012, 03:24:25 pm »
jaj, pero igual es con api, no es malo, lo que si (repito no estoy muy ducho con la red) pero no me lista "\\PC\Mi música" supongo que deveria no, eso es la compartida de mi pc

Saludos.

Psyke1

  • Megabyte
  • ***
  • Mensajes: 130
  • Reputación: +11/-7
  • VBManiac
    • Ver Perfil
    • h-Sec
Re:Enumerar carpetas de una carpeta compartida
« Respuesta #7 en: Noviembre 26, 2012, 03:31:47 pm »
Hubo una errata al plantear mi duda, puse "carpeta compartida"... cuando en realidad me refería al "servidor local".

En el ejemplo que pones de \\PC\Mi música en teoría se puede sacar con FSO (por ejemplo) puesto que a las subcarpetas sí te deja acceder...

Yo tan sólo quería listar todas las carpetas de \\PC::)

DoEvents! :P


LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Enumerar carpetas de una carpeta compartida
« Respuesta #8 en: Noviembre 26, 2012, 03:53:57 pm »
bien, hay un error si pones cualquier nombre por ejemplo  "\\asdfsdf"  PathIsNetworkPath()  lo hacepta por las \\ pero en realidad no existe ese path   abria que poner on error goto o verificar si oShell.NameSpace(CVar(sServer)) is nothing, otra cosa podes poner oItem.Path en ves de cocatenar
sServer & oItem.Name

saludos.

Psyke1

  • Megabyte
  • ***
  • Mensajes: 130
  • Reputación: +11/-7
  • VBManiac
    • Ver Perfil
    • h-Sec
Re:Enumerar carpetas de una carpeta compartida
« Respuesta #9 en: Noviembre 26, 2012, 04:38:08 pm »
Gracias, se me había escapado, no había caído que PathIsNetworkPath() trabajaba igual que PathIsDirectory():P
Ahora voy a buscar una alternativa para mi código con API.

DoEvents! :P


EDIT:
Encontré un inconveniente a tu modo de hacerlo: tarda demasiado si pones un servidor inexistente. Así que valió la pena hacer mi versión Api. :P

DoEvents! :P
« última modificación: Noviembre 26, 2012, 09:23:53 pm por Psyke1 »