Я нашел множество библиотек, которые помогут разобрать аргументы командной строки, но ни один из них, похоже, не обрабатывает имена файлов. Если я получаю что-то вроде "../foo" в командной строке, как мне определить полный путь к файлу?
Как получить полный путь для аргумента командной строки имени файла?
Ответ 1
POSIX имеет realpath()
.
#include <stdlib.h>
char *realpath(const char *filename, char *resolvedname);
ОПИСАНИЕ
Функция realpath() выводит из имени пути, на которое указывает имя файла, абсолютное имя пути, которое указывает один и тот же файл, разрешение которого не включает ".", ".." или символические ссылки. Сгенерированное имя пути сохраняется до максимального количества {PATH_MAX} байтов в буфере, на который указывает имя разрешено.
Ответ 2
Вы можете использовать boost::filesystem
для получения absolute path
файла, из его relative path
:
namespace fs = boost::filesystem;
fs::path p("test.txt");
fs::path full_p = fs::complete(p); // complete == absolute
std::cout << "The absolute path: " << full_p;
Ответ 3
Ответ 4
В сценариях оболочки команда "readlink -f" имеет функции realpath().