elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [RETO] Ruta más oculta
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [RETO] Ruta más oculta  (Leído 6,271 veces)
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
[RETO] Ruta más oculta
« en: 11 Enero 2013, 12:14 pm »

Pues eso, consiste en encontrar la manera más rápida de obtener la última carpeta accesible a partir de una ruta, los formatos válidos son estos:
Código
  1. Public Function getLastFolder(Byval sStartPath As String) As String()
  2. Public Function getLastFolder(Byval sStartPath As String) As Collection

Ejemplo:
Código
  1. Debug.Print getLastFolder("C:\Users\casa-pc\Desktop\")
  2.  
Código:
C:\Users\casa-pc\Desktop\Música\Sonido\Programas\Video\VLC\data\res

Consiste en encontrar la carpeta más profunda, en caso de haber más de una la función devolverá el resultado en una collection o en un array.

¡Suerte! :)


« Última modificación: 12 Enero 2013, 10:49 am por Psyke1 » En línea

$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: [RETO] Ruta más oculta
« Respuesta #1 en: 11 Enero 2013, 17:19 pm »

Pero tu tienes otras carpetas ademas de Musica en el Desktop no? xD

Es decir, si tengo 20 carpetas, pero solo una de ellas tiene mas carpetas dentro, entonces esta ultima es la que hay que buscar su ultima carpeta no?


En línea

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [RETO] Ruta más oculta
« Respuesta #2 en: 11 Enero 2013, 18:30 pm »

Claro, hay que sacar la ruta más profunda. ;)

DoEvents! :P
« Última modificación: 11 Enero 2013, 19:55 pm por Psyke1 » En línea

$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: [RETO] Ruta más oculta
« Respuesta #3 en: 11 Enero 2013, 21:22 pm »

No tengo instalado el VB6 pero queria pensarlo por lo menos. Si nadie contesta deja tu codigo que quiero verlo, se que tendras algo interesante xD
En línea

seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: [RETO] Ruta más oculta
« Respuesta #4 en: 11 Enero 2013, 21:30 pm »

pues aca te pongo algo simple con Dir$, no creo que sea lo mas rapido, seguro alguna recursiva podra ser mas veloz, como con FSO, pero por lo menos cumple el objetivo.

Código
  1. Option Explicit
  2.  
  3. Private Function CarpetaMasProfunda(ByVal pPath As String)
  4.  
  5.    Dim vCarpetas As New Collection
  6.    Dim vNext As Integer
  7.    Dim vDir As String
  8.    Dim vSubDir As String
  9.    Dim vResult As String
  10.  
  11.    vNext = 1
  12.    vCarpetas.Add pPath
  13.  
  14.    Do While vNext <= vCarpetas.Count
  15.  
  16.        vDir = vCarpetas(vNext)
  17.        vNext = vNext + 1
  18.  
  19.        vSubDir = Dir$(vDir & "\*", vbDirectory)
  20.  
  21.        Do While vSubDir <> ""
  22.  
  23.            If vSubDir <> "." And vSubDir <> ".." Then
  24.                vSubDir = vDir & "\" & vSubDir
  25.                On Error Resume Next
  26.                If GetAttr(vSubDir) And vbDirectory Then vCarpetas.Add vSubDir
  27.            End If
  28.  
  29.            vSubDir = Dir$(, vbDirectory)
  30.        Loop
  31.    Loop
  32.  
  33.    '---------------------------------------------------------------------
  34.  
  35.    vResult = ""
  36.  
  37.    Dim vArr() As String
  38.    Dim vCont As Integer
  39.    Dim i As Integer
  40.  
  41.    For i = 1 To vCarpetas.Count
  42.  
  43.        vArr = Split(vCarpetas(i), "\")
  44.  
  45.        If UBound(vArr) > vCont Then
  46.            vCont = UBound(vArr)
  47.            vResult = vCarpetas(i)
  48.        End If
  49.    Next i
  50.  
  51.    CarpetaMasProfunda = vResult
  52. End Function
  53.  
  54. Private Sub Form_Load()
  55.    MsgBox CarpetaMasProfunda("C:\Program Files")
  56. End Sub

lo probe con una carpeta con 10 mil carpetas adentro y en unos 10 segundos me muestra el path mas largo.

saludos.
En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.465


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: [RETO] Ruta más oculta
« Respuesta #5 en: 11 Enero 2013, 23:53 pm »

Tampoco tengo VB acá, pero se me ocurre hacer un comando dir, guardar el resultado en un txt y parsear lineas buscando la que tiene mas barras "\", osea, el path mas profundo.

El comando dir sería:

Código:
dir * /ad /s /b > c:\lista.txt

donde "c:\lista.txt" sería el path completo al archivo donde se guardan los dirs.
Despues se abre, se recorre linea 1 a 1 y se devuelve la mas profunda (contando las barras invertidas "\")

Si hago tiempo subo code.

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Elemental Code


Desconectado Desconectado

Mensajes: 622


Im beyond the system


Ver Perfil
Re: [RETO] Ruta más oculta
« Respuesta #6 en: 12 Enero 2013, 00:41 am »

Tampoco tengo VB acá, pero se me ocurre hacer un comando dir, guardar el resultado en un txt y parsear lineas buscando la que tiene mas barras "\", osea, el path mas profundo.

El comando dir sería:

Código:
dir * /ad /s /b > c:\lista.txt

donde "c:\lista.txt" sería el path completo al archivo donde se guardan los dirs.
Despues se abre, se recorre linea 1 a 1 y se devuelve la mas profunda (contando las barras invertidas "\")

Si hago tiempo subo code.

Saludos!


Cometi el error de copypastear tu codigo en una CMD.

CUIDADO CON EL PESO DEL TXT!
En línea

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.465


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: [RETO] Ruta más oculta
« Respuesta #7 en: 12 Enero 2013, 04:24 am »

Cometi el error de copypastear tu codigo en una CMD.
CUIDADO CON EL PESO DEL TXT!
:xD

Si, hice un par de pruebas mas y vi que puede obtenerse un archivo grande, aunque habría que hacer algunas comparativas para ver si el método conviene o no...

Ni bien tenga VB a mano, armo code y copio...

EDIT: Mi intento

Código
  1. Option Explicit
  2.  
  3. Public Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
  4. Public Declare Function GetTempFileName Lib "kernel32" Alias "GetTempFileNameA" (ByVal lpszPath As String, ByVal lpPrefixString As String, ByVal wUnique As Long, ByVal lpTempFileName As String) As Long
  5. Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long
  6.  
  7. Const sEmpty = ""
  8. Const cMaxPath = 260
  9. Const cmDbl = """"
  10.  
  11. Public Function getDeeperPath(Folder As String) As String
  12. 'Function does not check if Folder is a valid path name
  13. 'Folder must NOT end with backslash (\)
  14.  
  15. Dim tmpFilePath As String
  16. Dim sComm As String
  17. Dim taskId As Long
  18. Dim sLine As String
  19. Dim lDepth As Long
  20. Dim mPaths() As String
  21. Dim curDeeperFolder As String
  22.  
  23. tmpFilePath = GetTempFile
  24.  
  25. sComm = "cmd /c dir " + cmDbl + Folder + "\*" + cmDbl + " /ad /s /b > " + cmDbl + tmpFilePath + cmDbl
  26.  
  27. Err.Clear
  28. On Error GoTo Hell
  29.  
  30. taskId = Shell(sComm, vbHide)
  31.  
  32. Do While FileLen(tmpFilePath) = 0
  33.    DoEvents
  34. Loop
  35.  
  36. lDepth = 0
  37. curDeeperFolder = sEmpty
  38. Open tmpFilePath For Input Access Read As #1
  39. Do While Not EOF(1)
  40.    Line Input #1, sLine
  41.    If sLine <> sEmpty Then
  42.        If InStr(1, sLine, "\") > 0 Then
  43.            mPaths = Split(sLine, "\")
  44.            If UBound(mPaths) > lDepth Then
  45.                lDepth = UBound(mPaths)
  46.                curDeeperFolder = sLine
  47.            End If
  48.        End If
  49.    End If
  50. Loop
  51. Close #1
  52. Kill tmpFilePath
  53.  
  54. getDeeperPath = curDeeperFolder
  55. Exit Function
  56. Hell:
  57.    MsgBox "Error in getDeeperPath: " & Err.Description
  58. End Function
  59.  
  60. Function GetTempDir() As String
  61. Dim sRet As String, c As Long
  62.  
  63. sRet = String(cMaxPath, 0)
  64. c = GetTempPath(cMaxPath, sRet)
  65. 'If c = 0 Then ApiRaise Err.LastDllError
  66. GetTempDir = Left$(sRet, c)
  67. End Function
  68.  
  69. Function GetTempFile(Optional Prefix As String, Optional PathName As String) As String
  70. Dim sRet As String
  71.  
  72. If Prefix = sEmpty Then Prefix = sEmpty
  73. If PathName = sEmpty Then PathName = GetTempDir
  74.  
  75. sRet = String(260, 0)
  76. GetTempFileName PathName, Prefix, 0, sRet
  77. 'GetTempFile = GetFullPath(StrZToStr(sRet))
  78. GetTempFile = StrZToStr(sRet)
  79. End Function
  80.  
  81. ' Strip junk at end from null-terminated string
  82. Function StrZToStr(s As String) As String
  83.    StrZToStr = Left$(s, lstrlen(s))
  84. End Function
  85.  
« Última modificación: 12 Enero 2013, 06:41 am por MCKSys Argentina » En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [RETO] Ruta más oculta
« Respuesta #8 en: 12 Enero 2013, 10:42 am »

ATENCIÓN: He añadido un detalle en la explicación del reto.



La forma que se me había ocurrido es similar a la de seba123neo... Pero estoy convencido de que se puede hacer sin guardar todas las carpetas, se ahorraría muchísimo tiempo. Sigo pensando. :rolleyes:


Cometi el error de copypastear tu codigo en una CMD.

CUIDADO CON EL PESO DEL TXT!


 :laugh:

DoEvents! :P
« Última modificación: 12 Enero 2013, 10:46 am por Psyke1 » En línea

$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: [RETO] Ruta más oculta
« Respuesta #9 en: 12 Enero 2013, 14:00 pm »

Yo tenia algo pensado como BackTracking, se demoraria muchisimo pero el codigo seria mas corto que todos xD
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Mostrar carpeta oculta sin saber la ruta (chflags hidden)
Mac OS X
brank87 2 5,578 Último mensaje 12 Septiembre 2010, 19:28 pm
por putus
los reto a un reto muy dificil
Desafíos - Wargames
elshaker 2 4,256 Último mensaje 2 Enero 2013, 00:12 am
por kaiserr
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines