views:

471

answers:

3

Hi,

I open a file using std::ifstream.

I may open file using relative path (file.txt) or absolute path (C:\test\file.txt).

As I am passing a string as the file name, I dont know whether it is relative or absolute path.

Can anybody tell me how to get absolute path after file has been successfully open using std::ifstream ?

e.g.:

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

I want to get the absolute path after the file was open successfully.

Thanks,

+3  A: 

The fstream classes have no functionality for accessing or processing the name used to open the file with, and the C++ Standard Library has no filename processing functions - you will have to write the code yourself, or use a third-party library or operating system-supplied functions.

anon
+9  A: 

You can't, std::ifstream does not store this information.

What you can do, however, is:

  1. use process' current working directory to compose the absolute path yourself, or
  2. use a library like Boost.Filesystem library to transform between relative and absolute paths.

    boost::filesystem::path abs_path = boost::filesystem::complete("./rel/path");
    std::string abs_path_str = abs_path.string();
    
Alex B
+1  A: 

I don't think it is possible for a std::fstream. I did it for a FILE * on Windows (in a non-portable way). See http://stackoverflow.com/questions/2046515/from-file-object-to-file-name/2048730#2048730.

Have you considered extending the ifstream with your own class that remembers the file name?

Michael J