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)?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top