Znalazłem wiele bibliotek, które pomagają analizować argumenty wiersza poleceń, ale żaden z nich nie zajmuje się obsługą nazw plików. Jeśli otrzymam coś takiego jak "../foo" w linii poleceń, jak mogę znaleźć pełną ścieżkę do pliku?Jak uzyskać pełną ścieżkę do argumentu wiersza polecenia filename?
Odpowiedz
POSIX ma realpath()
.
#include <stdlib.h>
char *realpath(const char *filename, char *resolvedname);
OPIS
realpath() funkcji, wynika z ścieżka wskazywanego przez pliku, absolutny ścieżce, których nazwy tego samego pliku, którego rozwiązanie nie dotyczy”.«» .. "lub dowiązania symboliczne. Wygenerowana nazwa ścieżki jest przechowywana, maksymalnie do {PATH_MAX} bajtów, w buforze wskazywanym przez rozwiązaną nazwę.
Dzięki za edycję, Jonathan; a szczególnie w podsumowaniu. – pmg
Można użyć boost::filesystem
uzyskać absolute path
pliku, od jego 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;
fs :: absolute (p) w V3 – KindDragon
W skryptach powłoki polecenie "readlink -f" ma funkcjonalność realpath().
Dlaczego uważasz, że potrzebujesz pełnej ścieżki do pliku? Syscalls działają dobrze przy względnych ścieżkach. –
Wierzę, że polecenie "pwd" podaje aktualną ścieżkę/lokalizację. Powinieneś być w stanie wymyślić resztę ... ale Andrew (komentarz powyżej) jest poprawny. –
Moje narzędzie generuje pliki tekstowe, więc potrzebuję pełnej ścieżki. Budowanie ścieżek brzmi jak ból, to musiało zostać rozwiązane już 1000 razy. –