• Domingo 22 de Diciembre de 2024, 22:10

Autor Tema:  Funcion Para Obtener La Ruta De Un Archivo.  (Leído 3032 veces)

bcasadorodriguez

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Funcion Para Obtener La Ruta De Un Archivo.
« en: Lunes 22 de Agosto de 2005, 14:48 »
0
Hola, me gustaria saber si existe alguna función a la que le pase como argumento el nombre de un archivo (archivo.exe) y me de la ruta completa de dónde se encuentra.
Gracias!!.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Funcion Para Obtener La Ruta De Un Archivo.
« Respuesta #1 en: Lunes 22 de Agosto de 2005, 16:12 »
0
Cita de: "bcasadorodriguez"
Hola, me gustaria saber si existe alguna función a la que le pase como argumento el nombre de un archivo (archivo.exe) y me de la ruta completa de dónde se encuentra.
Gracias!!.
Que yo sepa no existe ninguna y supongo que por la simple razon de que puede existir el mismo ejecutable en diferentes directorios.

¿Que queres hacer exactamente?

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

bcasadorodriguez

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Funcion Para Obtener La Ruta De Un Archivo.
« Respuesta #2 en: Lunes 22 de Agosto de 2005, 16:18 »
0
Hola,
Tengo que ejecutar un programa, y para ello debo poner la ruta absoluta de dónde se encuentra, pero todo eso depende del sistema operativo, ya que si llevo este codigo a windows 98 ya no me encontraria en ese directorio el programa. Entonces querria una funcion a la que si le doy el nombre de un programa (nombre.exe) me buscase ese archivo.
No se si me entiendes.
gracias.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Funcion Para Obtener La Ruta De Un Archivo.
« Respuesta #3 en: Lunes 22 de Agosto de 2005, 16:23 »
0
Cita de: "bcasadorodriguez"
Hola,
Tengo que ejecutar un programa, y para ello debo poner la ruta absoluta de dónde se encuentra, pero todo eso depende del sistema operativo, ya que si llevo este codigo a windows 98 ya no me encontraria en ese directorio el programa. Entonces querria una funcion a la que si le doy el nombre de un programa (nombre.exe) me buscase ese archivo.
No se si me entiendes.
gracias.
Si, lo entiendo. Si la diferencia es por el path de Windows o de System, estos se pueden conseguir con un par de funciones (GetWindowsDirectory y GetSystemDirectory).

Para buscar podes usar FindFirstFile, FindNextFile y FindClose.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

bcasadorodriguez

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Funcion Para Obtener La Ruta De Un Archivo.
« Respuesta #4 en: Lunes 22 de Agosto de 2005, 16:57 »
0
Me podrias poner un ejemplo de cómo obtener la ruta de un programa, por ejemplo word??
Gracias.

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Funcion Para Obtener La Ruta De Un Archivo.
« Respuesta #5 en: Lunes 22 de Agosto de 2005, 17:06 »
0
Hola

Mira a ver si te vale esta funcion:

Código: Text
  1.  
  2. #include <windows.h>
  3.  
  4. char * DirectorioEjecutable (char* Directorio,int EspacioReservado)
  5. {
  6.   int i;
  7.   GetModuleFileName(GetModuleHandle(NULL),Directorio,EspacioReservado);
  8.   for(i=strlen(Directorio);Directorio[i]!='\\';i--);
  9.   Directorio[++i]=0;
  10.   return Directorio;
  11. }
  12.  
  13.  

salu2

bcasadorodriguez

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Funcion Para Obtener La Ruta De Un Archivo.
« Respuesta #6 en: Lunes 22 de Agosto de 2005, 17:29 »
0
Hola diodo.
La función me devuelve el directorio actual en el que me encuentro, pero yo necesito otra ubicación. Necesito la ruta de un programa que se encuentra en otro lugar, lugar que ni siquiera deberia saber, solo necesitaria introducir en la función que necesito el nombre del archivo ej: word.exe para que me devuelva la ruta de dónde se encuentra ese programa, para poder ejecutarlo cualquiera que sea su lugar.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Funcion Para Obtener La Ruta De Un Archivo.
« Respuesta #7 en: Lunes 22 de Agosto de 2005, 17:31 »
0
Ejemplo de la MSDN para buscar archivos:

Código: Text
  1.  
  2. #define _WIN32_WINNT 0x0400
  3.  
  4. #include <windows.h>
  5. #include <stdio.h>
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9.   WIN32_FIND_DATA FindFileData;
  10.   HANDLE hFind;
  11.  
  12.   printf ("Target file is %s.\n", argv[1]);
  13.   hFind = FindFirstFile(argv[1], &FindFileData);
  14.   if (hFind == INVALID_HANDLE_VALUE)
  15.   {
  16.     printf ("Invalid File Handle. GetLastError reports %d\n", GetLastError ());
  17.     return (0);
  18.   }
  19.   else
  20.   {
  21.     printf ("The first file found is %s\n", FindFileData.cFileName);
  22.     FindClose(hFind);
  23.     return (1);
  24.   }
  25. }
  26.  
  27.  

Lo podes hacer recursivo para que busque en todo el HD. Pero la pregunta es, ¿Que programa queres ejecutar? ¿No es preferible que este siempre en una ruta conocida, no el nombre sino que la pueda obtener con alguna funcion de la API como \Archivos de programa\ \Program Files\ por ejemplo?

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

bcasadorodriguez

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Funcion Para Obtener La Ruta De Un Archivo.
« Respuesta #8 en: Lunes 22 de Agosto de 2005, 17:58 »
0
Hola Eternal idol, este programa de MSDN, busca un archivo pero solo si yo le doy la ruta completa de dónde está.
Actualmente, en el programa que estoy desarrollando, para que se me ejecute el programa que necesito abrir, tengo puesta toda la ruta completa con el nombre del archivo ejecutable. Pero mi problema es que si este programa lo quiero trasladar a otro ordenador que no tenga windows xp, sino que tenga tenga por ejemplo w98 u otro diferente, ya no se podria ejecutar porque la ruta cambiaria; Entonces, si yo quiero transportar este programa a otro ordenador con otra version de windows seria mejor obtener la ruta mediante alguna función con la que sólo con pasarle como argumento el nombre del programa funcion(word.exe), me devolviese la ruta que yo necesito. No se si me entiendes.
De todas formas, tampoco se a lo que te refieres con lo de la Api, porque nunca he usado ninguna api.
Gracias !

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Funcion Para Obtener La Ruta De Un Archivo.
« Respuesta #9 en: Lunes 22 de Agosto de 2005, 18:08 »
0
Cita de: "bcasadorodriguez"
Hola Eternal idol, este programa de MSDN, busca un archivo pero solo si yo le doy la ruta completa de dónde está.
Actualmente, en el programa que estoy desarrollando, para que se me ejecute el programa que necesito abrir, tengo puesta toda la ruta completa con el nombre del archivo ejecutable. Pero mi problema es que si este programa lo quiero trasladar a otro ordenador que no tenga windows xp, sino que tenga tenga por ejemplo w98 u otro diferente, ya no se podria ejecutar porque la ruta cambiaria; Entonces, si yo quiero transportar este programa a otro ordenador con otra version de windows seria mejor obtener la ruta mediante alguna función con la que sólo con pasarle como argumento el nombre del programa funcion(word.exe), me devolviese la ruta que yo necesito. No se si me entiendes.
De todas formas, tampoco se a lo que te refieres con lo de la Api, porque nunca he usado ninguna api.
Gracias !
Como te decia antes lo podes hacer recursivo, pones que busque * y te devuelva todos los directorios, pero es una perdida de tiempo.

¿Porque va a cambiar de Windows 98 a Windows XP? ¿El programa se va a instalar o solo lo vas a copiar?

Si todos los programas van a estar en la misma ruta, que supongo sera asi, con que no pongas ruta y solo los nombres te va a funcionar perfectamente. Y si queres en ese caso si podes usar la funcion que te paso Diodo u otra funcion de la API de Windows llamada GetCurrentDirectory para conseguir la ruta actual y agregarle a ella el nombre del ejecutable.

API es Application Programming Interface y en este caso es la de Windows, son las funciones que provee el Sistema Operativo.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

bcasadorodriguez

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Funcion Para Obtener La Ruta De Un Archivo.
« Respuesta #10 en: Lunes 22 de Agosto de 2005, 18:24 »
0
Lo que estoy haciendo es un módulo que me va a permitir unir dos programas. En el codigo del módulo es donde tengo la llamada al segundo programa que es el que tengo que abrir desde el módulo. Entonces, cuando tu instalas el primer programa, para poder acceder al modulo, te lo copias en el directorio de modulos del primer programa que has instalado y este asi llamara al segundo programa que puede estar instalado en cualquier otro sitio. entonces como posible solucion es tener un modulo para cada tipo de sistema operativo, pero si hubiese una funcion que me permita obtener el path, asi solo tendria que usar una unica version para cualquier version de windos.
Aun asi con el programa de Diodo no se como podria buscar en todos los directorios, ya que solo me devuelve el actual en el que me encuentro.
No se como hacerlo!! espero que podais ayudarme, muchisimas gracias.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Funcion Para Obtener La Ruta De Un Archivo.
« Respuesta #11 en: Lunes 22 de Agosto de 2005, 18:28 »
0
Para buscar algo tenes que usar las funciones que te dije recursivamente, primero listar todos los directorios de la unidad que quieras (buscas c:\* por ejemplo) y despues buscar los archivos de esos directorios hasta encontrar el ejecutable.

Pero es una solucion POBRE y COMPLICADA, si hay varias versiones del ejecutable u otro ejecutable con el mismo nombre podes tener problemas.

Es mas facil que escribas un valor en el registro del sistema cuando lo instales y lo leas cuando lo quieras ejecutar.  :devil:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

bcasadorodriguez

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Funcion Para Obtener La Ruta De Un Archivo.
« Respuesta #12 en: Lunes 22 de Agosto de 2005, 18:56 »
0
No se cómo puedo buscar en todos los directorios hasta encontrar el archivo que necesito. Me podrias poner un ejemplo?. Y por cierto con lo del registro ya si que me has dejado sin palabras¿?¿?¿?
Gracias por la atencion.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Funcion Para Obtener La Ruta De Un Archivo.
« Respuesta #13 en: Lunes 22 de Agosto de 2005, 19:36 »
0
No es facil dar un ejemplo de esto, es practicamente el codigo.

Código: Text
  1.  
  2. void searchDrive(char *Drive, char *searchFile)
  3. {
  4.   WIN32_FIND_DATA file;
  5.   HANDLE driveHandle = FindFirstFile(Drive, &file);
  6.   if (driveHandle != INVALID_HANDLE_VALUE)
  7.   {
  8.     for (;FindNextFile(driveHandle, &file);)
  9.     {
  10.       if (file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
  11.       {
  12.         //file.cFileName es un directorio, usamos eso para llamarnos otra vez
  13.       }
  14.       else
  15.       {
  16.         //file.cFileName es un archivo, comparamos contra searchFile
  17.       }
  18.     }
  19.     FindClose(driveHandle);
  20.   }
  21. }
  22.  
  23.  

Asi como esta no es 100% funcional, te dejo un poco para que lo resuelvas vos.

El registro del sistema es donde Windows y las apliaciones desarrolladas para este Sistema Operativo guardan informacion, podes usar funciones como RegCreateKey (para abrir y crear claves), RegSetValueEx (para guardar un valor) y RegQueryValueEx (para leer el valor, en este caso el path).

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.