Visual Basic - Buscar un archivo

Life is soft - evento anual de software empresarial
 
Vista:

Buscar un archivo

Publicado por Nacho (4 intervenciones) el 09/11/2006 13:12:18
Hola a todos

He hecho un programa que se ha instalado un cliente. Despúes de nuevas modificaciones, quiero hacerle una actualización. En esta no necessito cambiar nada de la BDD, solo tengo que sobreescribir el .exe.

Este cliente esta en Francia de tal forma que no conozco el path donde se le ha instalado el programa c:\program archives, o que se lo haya instalado en otra partición como D: o F:. Tengo que encontrar el path y la única información que tengo és el nombre del archivo.

Alguien sabe como puedo encontrar el path del archivo que estoy buscando?

Espero haberme explicado.

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Buscar un archivo

Publicado por Natalia Camino (88 intervenciones) el 09/11/2006 23:08:27
Mirad si os vale este ejemplo:

http://www.canalvisualbasic.net/forum/forum_posts.asp?TID=28138
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Buscar un archivo

Publicado por Nacho (4 intervenciones) el 10/11/2006 00:03:25
Por lo que dice parece que sí me sirve. Tendré que provarlo y entenderlo.

Muchas gracias. Ya te diré que tal va.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Buscar un archivo

Publicado por Nacho (4 intervenciones) el 10/11/2006 11:55:14
Al final lo deje así. Usa menos variables, y se entiende mejor.

Private Declare Function SearchTreeForFile Lib "imagehlp" (ByVal RootPath As String, ByVal InputPathName As String, ByVal OutputPathBuffer As String) As Long
Private Declare Function GetLogicalDrives Lib "kernel32" () As Long

Public Function BuscarArchivo(ByVal ArchivoBuscado As String) As String
Const MAX_PATH = 260
Dim sBuffer As String = Space(MAX_PATH) 'buffer para almacenar el path
Dim sDrive As String 'los distintos directorios raiz que tiene el sistema (c:, d:,....)
Dim encontrado As Boolean = False ' saber si encontramos el archivo
For Each sDrive In Environment.GetLogicalDrives() 'por cada unidad raiz
If SearchTreeForFile(sDrive, ArchivoBuscado, sBuffer) <> 0 Then ' buscamos
encontrado = True ' si devuelve un valor distinto a 0 ponemos a true la variable encontrado y salimos
Exit For 'es poco elegante pero que manera mejor que salir de un for
End If
Next
If Not encontrado Then
sBuffer = ""
End If
Return sBuffer 'devuelve un string el blanco en caso de no encontrarlo el path del archivo en caso contrario.
End Function

Espero que sirva para más gente.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Buscar un archivo

Publicado por Nacho (4 intervenciones) el 11/11/2006 19:19:03
Perdón por el post anterior xq está mal.

Aquí está la solución:

dim encontrado as boolean = false
Const MAX_PATH = 26
Dim path_arxiu As String

Private Declare Function SearchTreeForFile Lib "imagehlp" (ByVal RootPath As String, ByVal InputPathName As String, ByVal OutputPathBuffer As String) As Long
Private Declare Function GetLogicalDrives Lib "kernel32" () As Long

Public Function BuscarArchivo(ByVal ArchivoBuscado As String) As String
Dim sDrive As String
Dim resultat As String = ""
For Each sDrive In Environment.GetLogicalDrives()
buscarEnPath(sDrive, ArchivoBuscado)
If path_arxiu <> "" Then
trobat = True
Exit For
End If
Next
If trobat Then
resultat = path_arxiu.Substring(0, path_arxiu.IndexOf(".exe") + 4)
'path_arxiu.Substring(path_arxiu.IndexOf(" "))
resultat = resultat.Substring(0, resultat.Length - ArchivoBuscado.length)
End If
Return resultat
End Function

Private Sub buscarEnPath(ByVal dir As String, ByVal ArchivoBuscado As String)
Dim aux As String = Space(MAX_PATH)
If Not trobat Then
If dir = "D:\Nacho\Cafes Cornella\Programes\HORECGM 2.0\Gestió de maquinària\bin\Debug" Then
Dim s As String = "aki"
End If
Dim sBuffer As String = Space(MAX_PATH)
SearchTreeForFile(dir, ArchivoBuscado, sBuffer)
If sBuffer <> aux Then
trobat = True
path_arxiu = sBuffer
End If
Dim subdir As String
Try
For Each subdir In Directory.GetDirectories(dir)
buscarEnPath(subdir, ArchivoBuscado)
Next
Catch ex As Exception
count += 1
End Try
End If
End Sub

És un método recursivo que devuelve el path al que pertenece el archivo. Si el archivo buscado es AcroRd32.exe y se encuentra en:
C:\Archivos de programa\Adobe\Acrobat 7.0\Reader\AcroRd32.exe
devuelve
C:\Archivos de programa\Adobe\Acrobat 7.0\Reader

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar