Come ottenere la directory corrente in un programma C?
-
08-07-2019 - |
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)?
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.