none
Como Buscar archivo y ejecutarlo RRS feed

  • 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.?


    domingo, 14 de enero de 2018 2:57

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.

    domingo, 14 de enero de 2018 14:05
  • 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);

    }



    domingo, 14 de enero de 2018 18:52

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.

    domingo, 14 de enero de 2018 14:05
  • 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
    domingo, 14 de enero de 2018 14:49
  • 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.
    domingo, 14 de enero de 2018 16:40
  • 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);

    }



    domingo, 14 de enero de 2018 18:52
  • gracias le hechare coco al rato, avisare cualquier cosa, muchas gracias por tu ayuda de verdad
    domingo, 14 de enero de 2018 22:55
  • 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.

    viernes, 19 de enero de 2018 14:38