Pregunta: | 17840 - PATH DONDE SE CORRE EL PROGRAMA |
Autor: | Enrique Araúz |
Buenas.
Quiciera ver si me pueden dar una ayuda en lo siguiente: Necesito saber si en Lenguaje C existe algun comando que me permita saber desde que path se esta corriendo el programa. Otra pregunta para aprobechar: En tal caso de que si existe tal comando, como puedo concatenar esa direccion con la sintaxis del comando SPAWNL(Me permite llamar a un programa desde otro) spawnl(P_WAIT,direccion,NULL) Me refiero a que el campo que llame direccion tenga el path de donde se esta corriendo el programa concatenada con el nombre de un archivo cualquiera que quiera ejecutar. Osea que direccion = PATH \ archivo.exe |
Respuesta: | Juan Manuel Mar |
Saludos:
No se si sea el caso, pero hay una función en la libreria dir.h que te devuelve la ruta actual de tu aplicación, es: getcwd Función: Lee del sistema el nombre del directorio de trabajo. Sintaxis: getcwd(directorio,tamañocad) /* Lee el directorio y la unidad */ Lo malo es que esto ahorita lo encontre en la red y no estoy en mi casa, así que no recuerdo bien si es la sintaxis correcta (lo siento es que tengo mala memoria), pero de cualquier manera revisa la ayuda de borland c++ (yo tengo la versión para ms-dos) y ahí te dan ejemplos, lo unico que tienes que hacer es declarar una cadena de suficiente tamaño para guardar la ruta devuelta, me parece que es CADENA=getcwd(); , lo siento no recuerdo, revisa eso por favor. Para concatenar cadenas usa strcat(cadena_resultante, cadena_a_unir), revisa la documentacion por si me equivoco con eso que tengo una memoria fatal, solo un detalle extra: Cuando concatenes cadenas siempre asegurate de limpiar la cadena resultante antes de unirlas por si acaso. |
Respuesta: | Iñaki Lopez |
Hola...
La respuesta planteada por Oscar Vazquez seria perfecta si no fuese porque, si se ejecuta el programa desde un directorio por debajo del que lo contiene... el contenido de "argv[0]" no es una ruta absoluta, es relativa... :( Ej: Resultado esperado: archivo a ejecutar: "c:\prog\app.exe" ejecutamos desde: "d:\pepe\" "argv[0]" contendra: "c:\prog\app.exe" Resultado no esperado: archivo a ejecutar: "c:\prog\app.exe" ejecutamos desde: "c:\prog\pepe\tmp\" "argv[0]" contendra: "..\..\app.exe" Llevo bastante tiempo intentando encontrar algo que funcione bien en cualquier ambiente (Dos/W9x/WNT/WMe/W2k/WXP)... ya que es evidente que la funcion "getcwd()" no sirve de nada en Windows porque el directorio activo puede ser cualquiera. Si alguien tiene una solucion clara y definitiva para esto... por favor, la exponga aqui... yo hare lo mismo si encuentro algo. Gracias por la ayuda, y perdon por esta respuesta que no es tal... :) |
Respuesta: | Oscar Vazquez |
Toda aplicación C tiene una función "main".
Este es la declaración completa int main( int argc, char *argv[ ], char *envp[ ] ) argc - Indica la cantidad de parámetros que recibe argv - Cada uno de los parámetros recibidos envp - La lista de las variables de entorno del sistema (en DOS - set varname=valor) El valor mínimo de argc es 1, indicando que al menos recibe un parámetro. Este parámetro corresponde al path completo de la aplicación que se está efecutando. al ejecutar C:\path\subpath\app.exe, el parámetro argv[0] contiene el siguiente valor "c:\path\subpath\app.exe" Esta función devuelve cada una de las partes del path de un archivo void splitpath( const char *path, char *drive, char *dir, char *fname, char *ext ); En el ejemplo anterior obtendrías: drive= "c:" dir = "\path\subpath" fname="app" ext=".exe"; Esta función te permite realizar la tarea inversa void _makepath( char *path, const char *drive, const char *dir, const char *fname, const char *ext ); |