Comment obtenir le répertoire courant dans un programme C?

je fais un programme C où j'ai besoin d'obtenir le répertoire d'où le programme est démarré. Ce programme est écrit pour les ordinateurs UNIX. J'ai regardé opendir() et telldir() , mais telldir() renvoie un off_t (long int) , donc ça ne m'aide vraiment pas.

Comment puis-je obtenir le chemin courant dans une chaîne (tableau char)?

128
demandé sur CharlesB 2008-11-18 14:36:29

5 réponses

avez-vous eu un oeil à 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;
}
237
répondu Mic 2018-08-30 06:51:08

cherche la page de manuel pour getcwd .

57
répondu CAdaker 2012-06-04 10:59:57

bien que la question soit étiquetée Unix, les gens ont également la possibilité de la visiter lorsque leur plate-forme cible est Windows, et la réponse pour Windows est la fonction GetCurrentDirectory()

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

ces réponses s'appliquent à la fois au code C et au code C++.

Lien proposé par user4581301 dans un commentaire à une autre question, et vérifié que le courant de premier choix avec un Recherche sur Google "site:microsoft.com getcurrentdirectory".

12
répondu Jonathan Leffler 2017-05-23 11:33:27
#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;
}
2
répondu Jevgenij Kononov 2017-12-18 22:39:39

notez que getcwd(3) est également disponible dans la libc de Microsoft: getcwd(3) , et fonctionne de la même manière que vous vous y attendiez.

doit être lié à -loldnames (oldnames.lib, qui est fait automatiquement dans la plupart des cas), ou utiliser _getcwd() . La version non corrigée n'est pas disponible sous Windows RT.

1
répondu rvx 2017-10-23 19:01:58