Comment obtenir le répertoire actuel dans un programme C?
-
08-07-2019 - |
Question
Je crée un programme C où je dois obtenir le répertoire à partir duquel le programme a été démarré. Ce programme est écrit pour les ordinateurs UNIX. J'ai consulté opendir ()
et telldir ()
, mais telldir ()
renvoie un off_t (long int)
, donc ça ne m'aide vraiment pas.
Comment puis-je obtenir le chemin actuel dans une chaîne (tableau de caractères)?
La solution
Avez-vous consulté getcwd ()
?
#include <unistd.h>
char *getcwd(char *buf, size_t size);
Exemple simple:
#include <unistd.h>
#include <stdio.h>
#include <limits.h>
int main() {
char cwd[PATH_MAX];
if (getcwd(cwd, sizeof(cwd)) != NULL) {
printf("Current working dir: %s\n", cwd);
} else {
perror("getcwd() error");
return 1;
}
return 0;
}
Autres conseils
Recherchez la getcwd
dans la page de manuel.
Bien que la question porte la balise Unix, les utilisateurs la consultent également lorsque leur plate-forme cible est Windows. La réponse pour Windows est la suivante: GetCurrentDirectory ()
fonction:
DWORD WINAPI GetCurrentDirectory(
_In_ DWORD nBufferLength,
_Out_ LPTSTR lpBuffer
);
Ces réponses s'appliquent aux codes C et C ++.
Lien suggéré par user4581301 dans un comment à une autre question et vérifié comme le premier choix actuel avec un site de recherche Google : microsoft.com getcurrentdirectory '.
#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;
}
Notez que getcwd (3)
est également disponible dans la libc de Microsoft: getcwd (3) , et fonctionne comme vous le souhaitiez.
Doit être lié à -loldnames
(oldnames.lib, ce qui se fait automatiquement dans la plupart des cas), ou utilisez _getcwd ()
. La version sans préfixe n'est pas disponible sous Windows RT.