Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: fjtina721 en 11 Noviembre 2005, 23:11 pm



Título: Buscar Archivos con Visual Basic 6.0
Publicado por: fjtina721 en 11 Noviembre 2005, 23:11 pm
Hola todo el mundo,

Tengo un directorion con muchos muchos archivos .doc (Documentos de Word), y necesito hacer un programa en visual Basic que  dada una cadena o texto,  muestre la lista de todos los archivos de word que contengan esa cadena (No en el nombre del documento, si no en el contenido del documento).

Bueno una forma de solución que se me ocurrio, fue agregar al proyecto las referncias de "Microsoft Word xxx Object", de esta manera podría abrir uno a uno todos los documentos y buscar si la cadena está en el contenido de cada documento, pero esto es demasiado lento.


Quisiera saber si hay algún Activex o algun objeto de Windows que pueda agregar al proyecto y que me permita hacer esto. Algo así como la opción de busqueda como la que trae el Explorardor de Archivos de Windows


De antemano muchas Gracias  ;)


Título: Re: Buscar Archivos con Visual Basic 6.0
Publicado por: Slasher-K en 12 Noviembre 2005, 02:49 am
Listar Directorios con Visual Basic
http://foro.elhacker.net/index.php/topic,62885.0.html

Antes de preguntar algo lee las reglas y la recopilación de enlaces, que ahí está casi todo lo que necesitas.

Recopilación de enlaces de Visual Basic
http://foro.elhacker.net/index.php/topic,68352.0.html

REGLAS DEL FORO ¡LEED TODOS!
http://foro.elhacker.net/index.php/topic,93618.0.html

Saludos.


Título: Re: Buscar Archivos con Visual Basic 6.0
Publicado por: fjtina721 en 12 Noviembre 2005, 19:38 pm
Pido Disculpas si depronto no me hice entender o no utilicé las palabras correctas.

Vuelvo a redactar mi pregunta, aclarando que antes consulté  algunos post sobre el tema en este foro pero no encontré nada que resolviera mi duda,
Desde luego los enlaces citados por el moderador son muy informativos pero no son lo que estoy buscnado.

Han notado que el explorador de archivos de windows trae un botón llamado "Búsqueda" en la barra de herramientas, cuando se cliquea abre un panel que permite buscar archivos que contengan determinado texto ya sea en el nombre del archivo o en el contenido del archivo.

Lo que yo deseo saber es cual dll es la que permite hacer esto (No deseo detalles de como hacer uso de la api de windows o de como se usar los metodos y funciones de una dll en un  proyecto de visual basic)

Simplemente deseo saber cual es el nombre de la librería que efectua las busqueda de archivos,  y algunas de las funciones mas destacadas. Solo
eso.

Nuevamente gracias.


Título: Re: Buscar Archivos con Visual Basic 6.0
Publicado por: Slasher-K en 12 Noviembre 2005, 23:19 pm
El sistema es lo mismo, usas esa función recursiva que aparece en el código para recorrer todos los directorios y archivos, con FindFirstFile (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/findfirstfile.asp) y FindNextFile (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/findnextfile.asp).

Te dejo el código para que lo veas, como recorre todos los directorios y archivos. Sólo hay que hacerle un par de modificaciones para que busque.

Código:
Option Explicit

Sub DiskWalk(Optional Path As String)
  On Error Resume Next
 
          Static sCurDir$
          Dim sDirName$
          Dim iCnt%, i%
 
  If Path = vbNullString Then
    'Si se pasa el argumento establece la unidad inicial.
    '
    Path = GetLocalDrive(1)
    sCurDir = Path  'Primer directorio (root)
   
  ElseIf Not Right$(Path, 1) Like "\" Then Path = Path & "\"  'Agrega la barra
 
  End If
 
  'Obtiene cuántos directorios hay en el directorio actual (sCurDir)
  iCnt = GetDirCnt(Path)
 
  'Recorre todos los directorios.
  '
  For i = 1 To iCnt
    sDirName = GetDir(Path, i)   'Obtiene el nombre de un directorio.
    sCurDir = sCurDir & sDirName  'Próximo directorio.
   
    'Copia el archivo en los subdirectorios del
    'directorio actual.
    '
    Call DiskWalk(sCurDir)
   
    'Pasa al nivel anterior.
    '
    sCurDir = Left$(sCurDir, Len(sCurDir) - 1)
    sCurDir = Left$(sCurDir, InStrRev(sCurDir, "\"))
   
    DoEvents
  Next
End Sub

Function GetLocalDrive(Optional Index As Integer) As String
  On Error Resume Next
 
        Dim sDrives$, saDrives$()
        Dim i%, iCurIndex%
        Dim r&

  'Obtiene todas las unidades de disco.
  '
  sDrives = String$(256, 0)
  r = GetLogicalDriveStrings(256, ByVal sDrives)
 
  'Guarda las unidades en una matriz
  '
  saDrives = Split(sDrives, vbNullChar)
 
  For i = 1 To UBound(saDrives)
    If GetDriveType(saDrives(i)) = DRIVE_FIXED Then
      'Si es una unidad de disco local
      'verifica que corresponda con el
      'indice especificado.
      '
      iCurIndex = iCurIndex + 1
     
      If iCurIndex = Index Then
        GetLocalDrive = saDrives(i)
       
        Exit For
      End If
    End If
  Next

End Function

Function GetDirCnt(PathSpec As String) As Long
  On Error Resume Next
 
        Dim sDir$, lCnt&

  'Agrega la barra '\' si no está incluida
  'en la ruta de acceso.
  '
  PathSpec = IIf(Not Right$(PathSpec, 1) Like "\", PathSpec & "\", PathSpec)
 
  'Obtiene el primer directorio.
  '
  sDir = Dir(PathSpec, vbDirectory Or vbHidden Or vbSystem)
 
  'Recorre todos los directorios.
  '
  Do While Not (sDir Like vbNullString)
    If Not Left$(sDir, 1) Like "." Then
      sDir = PathSpec & sDir
     
      If (GetAttr(sDir) And vbDirectory) = vbDirectory Then
        'Si es un directorio incrementa el contador.
        '
        lCnt = lCnt + 1
      End If
    End If
InvalidDir:
    sDir = Dir()  'Obtiene el próximo archivo o directorio.
  Loop
 
  GetDirCnt = lCnt
End Function

Function GetDir(PathSpec As String, Index As Integer, Optional GetOnlyDirName As Boolean = True) As String
  On Error Resume Next
 
        Dim sDir$, lCnt&

  'Agrega la barra '\' si no está incluida
  'en la ruta de acceso.
  '
  PathSpec = IIf(Not Right$(PathSpec, 1) Like "\", PathSpec & "\", PathSpec)
 
  'Obtiene el primer directorio.
  '
  sDir = Dir(PathSpec, vbDirectory Or vbHidden Or vbSystem)
 
  'Recorre todos los directorios.
  '
  Do While Not (sDir Like vbNullString)
    If Not Left$(sDir, 1) Like "." Then
      If (GetAttr(PathSpec & sDir) And vbDirectory) = vbDirectory Then
        'Si es un directorio incrementa el contador.
        '
        lCnt = lCnt + 1
       
        If lCnt = Index Then
          'Si es el directorio requerido devuelve
          'el nombre.
          '
          GetDir = IIf(GetOnlyDirName, sDir, PathSpec & sDir)
          GetDir = IIf(Not Right$(GetDir, 1) Like "\", GetDir & "\", GetDir)
         
          Exit Do
        End If
      End If
    End If
InvalidDir:
    sDir = Dir()  'Obtiene el próximo archivo o directorio.
  Loop

End Function

Saludos.


Título: Re: Buscar Archivos con Visual Basic 6.0
Publicado por: fjtina721 en 15 Noviembre 2005, 23:52 pm
Si, estuve revisando el archivo de texto winapi.txt que venía con mi distribución de visual Basic y en la lista de declaraciones encontré esta función (FindFirstFile) que parece ser es lo que estaba bucando, voy a cacharrearle para ver como me va.

Muchas Gracias !!