2009-11-02 10 views
11

He encontrado muchas bibliotecas para ayudar con el análisis de argumentos de línea de comandos, pero ninguna de ellas parece ocuparse de manejar nombres de archivo. Si recibo algo como "../foo" en la línea de comandos, ¿cómo puedo averiguar la ruta completa al archivo?¿Cómo obtengo la ruta completa para un argumento de línea de comandos de nombre de archivo?

+7

¿Por qué crees que necesitas la ruta completa al archivo? Las llamadas de sistema funcionan bien con rutas relativas. –

+0

Creo que el comando 'pwd' te da tu ruta/ubicación actual. Deberías poder calcular el resto ... pero Andrew (comentario anterior) es correcto. –

+1

Mi utilidad genera algunos archivos de texto, así que necesito la ruta completa. La construcción de caminos suena como un dolor, esto ya debe haber sido resuelto 1000 veces. –

Respuesta

15

POSIX tiene realpath().

#include <stdlib.h> 
char *realpath(const char *filename, char *resolvedname); 

DESCRIPCIÓN
El realpath() función de deriva, de la ruta a la que apunta nombre, una ruta absoluta que da nombre al mismo archivo, cuya resolución no implica". '' .. ", o enlaces simbólicos. El nombre de ruta generado se almacena, hasta un máximo de {PATH_MAX} bytes, en el búfer al que apunta resolvedname.

+0

Gracias por la edición, Jonathan; y especialmente para el resumen. – pmg

19

Se podría utilizar para obtener el boost::filesystemabsolute path de un archivo, desde su 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) en V3 – KindDragon

1

En los scripts de shell, el comando "readlink -f" tiene la funcionalidad de realpath().

Cuestiones relacionadas