2009-11-02 21 views
11

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?

+7

Dlaczego uważasz, że potrzebujesz pełnej ścieżki do pliku? Syscalls działają dobrze przy względnych ścieżkach. –

+0

Wierzę, że polecenie "pwd" podaje aktualną ścieżkę/lokalizację. Powinieneś być w stanie wymyślić resztę ... ale Andrew (komentarz powyżej) jest poprawny. –

+1

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. –

Odpowiedz

15

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ę.

+0

Dzięki za edycję, Jonathan; a szczególnie w podsumowaniu. – pmg

19

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; 
+4

fs :: absolute (p) w V3 – KindDragon

1

W skryptach powłoki polecenie "readlink -f" ma funkcjonalność realpath().

Powiązane problemy