2008-11-18 37 views
116

Estoy haciendo un programa en C donde necesito obtener el directorio desde el que se inicia el programa. Este programa está escrito para computadoras UNIX. He estado mirando opendir() y telldir(), pero telldir() devuelve off_t (long int), por lo que realmente no me ayuda.¿Cómo obtener el directorio actual en un programa C?

¿Cómo puedo obtener la ruta actual en una cadena (matriz de caracteres)?

Respuesta

218

¿Has echado un vistazo a getcwd()?

#include <unistd.h> 
char *getcwd(char *buf, size_t size); 

ejemplo simple:

#include <unistd.h> 
#include <stdio.h> 
#include <errno.h> 

int main() { 
    char cwd[1024]; 
    if (getcwd(cwd, sizeof(cwd)) != NULL) 
     fprintf(stdout, "Current working dir: %s\n", cwd); 
    else 
     perror("getcwd() error"); 
    return 0; 
} 
+8

Escoger el pickiest de nits, parece innecesario, y el programa informa de éxito incluso en caso de fallo a través de su estado de salida. De lo contrario, un buen ejemplo. –

+18

Ah, ¿y es más convencional usar printf (...) en lugar de fprintf (stdout, ...)? –

+11

@JonathanLeffler: Esa no es la más quisquillosa de las liendres. Esto es: 'int main()' debe ser 'int main (void)'. –

59

Busque la página del manual para getcwd.

+8

Mejor también incluir el fragmento de código de ejemplo. – sudo

+4

@angad enseñar a un hombre a pescar, pero al menos mostrarle el camino hacia el lago/mar/océano :) – mtk

+1

google> hombre :) –

9

Aunque la cuestión se marca Unix, las personas también llegan a visitarla cuando su plataforma de destino es Windows, y la respuesta para Windows es la función GetCurrentDirectory():

DWORD WINAPI GetCurrentDirectory(
    _In_ DWORD nBufferLength, 
    _Out_ LPTSTR lpBuffer 
); 

Estas respuestas se aplican al código C y C++.

Enlace sugerido por user4581301 en un comment a otra pregunta, y se verifica como la mejor opción actual con una búsqueda 'site: microsoft.com GetCurrentDirectory' Google.

0

Tenga en cuenta que getcwd(3) también está disponible en la libc de Microsoft: getcwd(3), y funciona de la manera que usted espera.

Debe vincular con -loldnames (oldnames.lib, que se realiza automáticamente en la mayoría de los casos), o utilizar _getcwd(). La versión no prefijada no está disponible en Windows RT.

0
#include <stdio.h> /* defines FILENAME_MAX */ 
//#define WINDOWS /* uncomment this line to use it for windows.*/ 
#ifdef WINDOWS 
#include <direct.h> 
#define GetCurrentDir _getcwd 
#else 
#include <unistd.h> 
#define GetCurrentDir getcwd 
#endif 

int main(){ 
    char buff[FILENAME_MAX]; 
    GetCurrentDir(buff, FILENAME_MAX); 
    printf("Current working dir: %s\n", buff); 
    return 1; 
} 
Cuestiones relacionadas