How get file path from std::ifstream in c++

Nilesh Shinge picture Nilesh Shinge · Jun 11, 2010 · Viewed 29.2k times · Source

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,

Answer

Alex B picture Alex B · Jun 11, 2010

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();