2010-06-11 107 views
20

Abro un archivo usando std::ifstream.Cómo obtener la ruta del archivo desde std :: ifstream en C++

Puedo abrir el archivo usando la ruta relativa (file.txt) o la ruta absoluta (C:\test\file.txt).

Como paso una cadena como nombre de archivo, no sé si es una ruta relativa o absoluta.

¿Alguien me puede decir cómo obtener la ruta absoluta después de que el archivo se ha abierto con éxito usando std::ifstream?

ej .:

std::ifstream file(strFile); // strFile is "file.txt" or "C:\test\file.txt" 

quiero obtener la ruta absoluta después de que el archivo fue abierto con éxito.

Gracias,

+0

¿Estás haciendo una aplicación de consola o estás usando un framework para tener algún tipo de interfaz de usuario (UI)? – Alerty

Respuesta

3

Las clases fstream no tienen funcionalidad para acceder o procesar el nombre que se utiliza para abrir el archivo con, y la biblioteca estándar de C++ no tiene funciones de procesamiento de nombre - que tendrá que escribir el código usted mismo, o utilizar una biblioteca de terceros o funciones proporcionadas por el sistema operativo.

17

No puede, std::ifstream no almacena esta información.

Lo que puede hacer, sin embargo, es:

directorio de trabajo actual
  1. proceso de uso para componer la ruta absoluta a sí mismo, o
  2. usar una biblioteca como Boost.Filesystem biblioteca para transformar entre relativa y caminos absolutos

    boost::filesystem::path abs_path = boost::filesystem::complete("./rel/path"); 
    std::string abs_path_str = abs_path.string(); 
    
2

no creo que es posible que un std :: fstream. Lo hice para un ARCHIVO * en Windows (de una manera no portátil). Ver from file object to file name.

¿Ha considerado extender el ifstream con su propia clase que recuerda el nombre del archivo?

+1

Sería útil que la persona que rechazó esta respuesta de 5 años de edad dejara un comentario explicando lo que está mal. –

Cuestiones relacionadas