Как получить текущий каталог в программе C?
Я делаю программу на C, где мне нужно получить каталог, из которого запускается программа. Эта программа написана для компьютеров UNIX. Я смотрел на opendir()
и telldir()
, а telldir()
возвращает off_t (long int)
, Так что это действительно не помогает мне.
как я могу получить текущий путь в строку (массив char)?
5 ответов
вы посмотрели на getcwd()
?
#include <unistd.h>
char *getcwd(char *buf, size_t size);
простой пример:
#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;
}
хотя вопрос помечен Unix, люди также могут посетить его, когда их целевой платформой является Windows, а ответ для Windows -GetCurrentDirectory()
функция:
DWORD WINAPI GetCurrentDirectory(
_In_ DWORD nBufferLength,
_Out_ LPTSTR lpBuffer
);
эти ответы применимы как к коду C, так и к c++.
ссылка, предложенная user4581301 на комментарий к другому вопросу и проверено как текущий верхний выбор с помощью поиска Google 'site: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;
}
отметим, что getcwd(3)
также доступен в libc от Microsoft:getcwd (3), и работает так же, как вы ожидаете.
необходимо связать с -loldnames
(oldnames.lib, что в большинстве случаев делается автоматически), или используйте _getcwd()
. Неподготовленная версия недоступна в Windows RT.