Как получить текущий каталог в программе на C?
-
08-07-2019 - |
Вопрос
Я делаю программу на C, где мне нужно получить каталог, из которого она запущена. Эта программа написана для компьютеров UNIX. Я просматривал opendir ()
и telldir ()
, но telldir ()
возвращает off_t (long int)
, так что это действительно не помогает мне. Р>
Как я могу получить текущий путь в строке (массив символов)?
Решение
Посмотрели ли вы 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;
}
Другие советы
Найдите справочную страницу для getcwd
.
Хотя вопрос помечен как Unix, люди также посещают его, когда их целевой платформой является Windows, а ответ для Windows - GetCurrentDirectory ()
функция:
DWORD WINAPI GetCurrentDirectory(
_In_ DWORD nBufferLength,
_Out_ LPTSTR lpBuffer
);
Эти ответы применимы как к С, так и к С ++ коду.
Ссылка, предложенная user4581301 в комментарий к другому вопросу и подтвержден в качестве текущего наиболее популярного на сайте поиска 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;
}
Обратите внимание, что getcwd (3)
также доступен в libc от Microsoft: getcwd (3) и работает так, как вы ожидаете.
Необходимо связать с -loldnames
(oldnames.lib, что в большинстве случаев выполняется автоматически) или использовать _getcwd ()
. Версия без префикса недоступна в Windows RT.