Как получить полный путь для аргумента командной строки имени файла?

Я нашел множество библиотек, которые помогут разобрать аргументы командной строки, но ни один из них, похоже, не обрабатывает имена файлов. Если я получаю что-то вроде "../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;

Ответ 4

В сценариях оболочки команда "readlink -f" имеет функции realpath().