Как получить текущий каталог в программе 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.