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 ;)
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.
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.
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.
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.
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 !!