Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: Psyke1 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:
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().
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
-
Probaste si haciendo directamente desde el explorer es lento?
-
No te sirve asi, comproba si un archivo existe dentro de una carpeta compartida.
Como Referencia: Microsoft Scripting Runtime
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
-
@raul
Qué va, de ese modo es instantáneo.
Me puse a mirar el código de allapi (http://allapi.mentalis.org/apilist/2AA74BB4AC857C52AD4BC7FA9E4DB1B7.html) y mira:
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
-
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.
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.
-
¡Funciona! :o
Gracias
Jajajajajaja ¡TE ODIO! >:( ;D
Mira lo que había hecho:
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
-
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.
-
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
-
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.
-
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