Principales respuestas
Como Buscar archivo y ejecutarlo

Pregunta
-
Hola me gustaria que me ayudaran con un ejemplo de como podria buscar un archivo y si esta presente ejecutarlo
BtnClick------------ evento de boton try { var ret = Process.Start("Skype.exe"); if (ret == null) { } } catch (Exception) { SpeakOut("El Programa, no se ha encontrado, instálelo para poder usarlo"); Process.Start("https://www.skype.com/es/get-skype/"); }
esta parte no tiene problemas pero ocurre que , quiero que busque el archivo en toda la pc ya que en mi caso lo tengo pero no lo abre a menos que le ubique la direccion correcta. Antes servia pero desde la ultima actualizacion ya no, tengo u boton para abrir Word y esta de la misma manera "winword.exe" se llama y sin especiicar direccion lo abre, alguien puede explicarme eso.?
- Editado RigorVzla domingo, 14 de enero de 2018 3:02
- Cambiado Enrique M. Montejo martes, 16 de enero de 2018 8:32 Desarrollo con C#.
Respuestas
-
Hola muy buenas, se abre windword.exe sin especificar ruta y skype.exe no, es debido a que su directorio esta dentro de la variable de entorno PATH en esta variable se asignan los directorios donde por defecto se buscaran los programa a ejecutar, un ejemplo de esto es por ejemplo notepad.exe que se encuentra en la carpeta system32
Te dejo ayuda de msdn para los metodos que necesitas para buscar un archivo en el sistema.
para buscar el archivo usas el método directory.Getfiles
https://msdn.microsoft.com/es-es/library/wz42302f.aspx
Para hacer la búsqueda en subdirectorios te dejo este ejemplo de la msdn:
https://msdn.microsoft.com/es-es/library/ms143448(v=vs.110).aspx
Y luego para asegurarte de que existe el archivo file.Exists
https://msdn.microsoft.com/es-es/library/system.io.file.exists(v=vs.110).aspx
Un saludo.
- Propuesto como respuesta Pablo RubioModerator lunes, 15 de enero de 2018 16:02
- Marcado como respuesta Pablo RubioModerator miércoles, 17 de enero de 2018 15:42
-
Buenas yo si quieres puedo ayudarte con la fucnión en c# recursiva paara buscar el archivo (tendras que corregirla por que te la pondre de memoria
funcion string BuscarArchivo(string DirectoryInfo di, ref bool encontrado, string archivo)
{
// miramos en cada archivo del di que se le pase
forEach(FileInfo fi in di.GetFile())
{
// comparamos cada archivo
encontrado = fi.NAme.Tolower()==archivo)
// si es el archivo paramos recursividad y devolvemos la ruta
if (encontrado) // Devolvemos lar ruta del arhcivo
return fi.FullName;
}
// Como no lo encontro en ningun archivo miramos las carpetas y empezamos de nuevo para cada una
foreach(DirectoryInfo di1 in di.GEtDirectories())
{
string nombreRuta= BuscarArchivo(di1,encontrado); // llamada recursiva
if(encontrado)
return nombreRuta;
}
return null;
}
}
Ahora para usarlo le pasas la ruta incial donde buscar por ejemplo un directoryinfo de c:\
function string BuscarARchivoEnruta(string archivo, string pathinicial)
{
directoryInfo di = new DirectoryInfo(pathInicial);
if (di.Exists)
bool encontrado = false;
// devuelve null si no se encuentra y encotnrado = false o encontrado = true y la ruta diferente de null si lo encuentra
return BuscarArchivo(di,ref encontrado , archivo);
}
- Editado vyrcyrus_ domingo, 14 de enero de 2018 19:04
- Propuesto como respuesta Pablo RubioModerator lunes, 15 de enero de 2018 16:03
- Marcado como respuesta Pablo RubioModerator miércoles, 17 de enero de 2018 15:42
Todas las respuestas
-
Hola muy buenas, se abre windword.exe sin especificar ruta y skype.exe no, es debido a que su directorio esta dentro de la variable de entorno PATH en esta variable se asignan los directorios donde por defecto se buscaran los programa a ejecutar, un ejemplo de esto es por ejemplo notepad.exe que se encuentra en la carpeta system32
Te dejo ayuda de msdn para los metodos que necesitas para buscar un archivo en el sistema.
para buscar el archivo usas el método directory.Getfiles
https://msdn.microsoft.com/es-es/library/wz42302f.aspx
Para hacer la búsqueda en subdirectorios te dejo este ejemplo de la msdn:
https://msdn.microsoft.com/es-es/library/ms143448(v=vs.110).aspx
Y luego para asegurarte de que existe el archivo file.Exists
https://msdn.microsoft.com/es-es/library/system.io.file.exists(v=vs.110).aspx
Un saludo.
- Propuesto como respuesta Pablo RubioModerator lunes, 15 de enero de 2018 16:02
- Marcado como respuesta Pablo RubioModerator miércoles, 17 de enero de 2018 15:42
-
Muy buenas, puedes arreglarlo de muchas maneras,
Puedes disponer de un archivo en tu app donde ubicas las última ruta q funcionó cargas esa configuración y al hacer click intentas abrir el archivo si existen( puedes usar lanclase de system.io fileinfo para tal fin, con la prop existís) en caso q no exista puedes hacer que una función busque el archivo en tu ordenador usando directoryInfo y fileinfo para buscar en cada carpeta hasta encontrarlo. Cuando lo encuentras actualiza el archivo de configuración y vuelve a ejecutar.
No te pongo el código pq es más interesante qblo escribas tu.
Saludos
- Editado vyrcyrus_ domingo, 14 de enero de 2018 14:50
-
gracias por dejarme esa parte interesante... estare escribiendo aqui mis resultados de acuerdo a mi codigo y espero no sea algo tan complicado por eque soy nuevo en este mundo de c# y wpf (mi primer y unico lenguaje) por eso pedi el ejemplo de codigo.
-
Buenas yo si quieres puedo ayudarte con la fucnión en c# recursiva paara buscar el archivo (tendras que corregirla por que te la pondre de memoria
funcion string BuscarArchivo(string DirectoryInfo di, ref bool encontrado, string archivo)
{
// miramos en cada archivo del di que se le pase
forEach(FileInfo fi in di.GetFile())
{
// comparamos cada archivo
encontrado = fi.NAme.Tolower()==archivo)
// si es el archivo paramos recursividad y devolvemos la ruta
if (encontrado) // Devolvemos lar ruta del arhcivo
return fi.FullName;
}
// Como no lo encontro en ningun archivo miramos las carpetas y empezamos de nuevo para cada una
foreach(DirectoryInfo di1 in di.GEtDirectories())
{
string nombreRuta= BuscarArchivo(di1,encontrado); // llamada recursiva
if(encontrado)
return nombreRuta;
}
return null;
}
}
Ahora para usarlo le pasas la ruta incial donde buscar por ejemplo un directoryinfo de c:\
function string BuscarARchivoEnruta(string archivo, string pathinicial)
{
directoryInfo di = new DirectoryInfo(pathInicial);
if (di.Exists)
bool encontrado = false;
// devuelve null si no se encuentra y encotnrado = false o encontrado = true y la ruta diferente de null si lo encuentra
return BuscarArchivo(di,ref encontrado , archivo);
}
- Editado vyrcyrus_ domingo, 14 de enero de 2018 19:04
- Propuesto como respuesta Pablo RubioModerator lunes, 15 de enero de 2018 16:03
- Marcado como respuesta Pablo RubioModerator miércoles, 17 de enero de 2018 15:42
-
-
hola nuevamente lo hice asi que fue lo que pude entender y no resulto incluso dandole la direccion correcta
private void Button_Click(object sender, RoutedEventArgs e) { try { string[] dirs = Directory.GetFiles(@"C:\Program Files (x86)\Microsoft\Skype for Desktop", "Skype.exe"); foreach (string dir in dirs) { var ret = Process.Start("Skype.exe"); if (ret == null) { } } } catch (Exception) { MessageBox.Show("El Programa, no se ha encontrado, instálelo para poder usarlo"); Process.Start("https://www.skype.com/es/get-skype/"); } }
podrias corregi mi error y explicarme , disuclpa si eso ultimo causa molestia.