Domanda

Sto realizzando un programma C in cui ho bisogno di ottenere la directory da cui è stato avviato il programma. Questo programma è scritto per computer UNIX. Ho esaminato opendir () e telldir () , ma telldir () restituisce un off_t (long int) , quindi non mi aiuta davvero.

Come posso ottenere il percorso corrente in una stringa (array di caratteri)?

È stato utile?

Soluzione

Hai dato un'occhiata a getcwd () ?

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

Esempio semplice:

#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;
}

Altri suggerimenti

Cerca nella pagina man getcwd .

Sebbene la domanda sia taggata Unix, le persone possono anche visitarla quando la loro piattaforma di destinazione è Windows e la risposta per Windows è GetCurrentDirectory () funzione:

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

Queste risposte si applicano sia al codice C che al codice C ++.

Link suggerito da user4581301 in un commento a un'altra domanda e verificato come la migliore scelta corrente con un sito di ricerca di 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;
}

Nota che getcwd (3) è disponibile anche in libc di Microsoft: getcwd (3) e funziona come ti aspetteresti.

Deve essere collegato a -loldnames (oldnames.lib, che viene eseguito automaticamente nella maggior parte dei casi), oppure utilizzare _getcwd () . La versione non prefissata non è disponibile in Windows RT.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top