Search code examples
c++pathboost-filesystem

How to get the absolute file path from the system PATH in C++?


Is it possible to get the full path to the file by its name if it is in the system PATH?

For example, I have cmake in my PATH. Can I get the full path to it using C++ filesystem library? I just want to make cross-platform check for file existence.


Solution

  • Boost.Process has this functionality in search_path . Here is a small linux example testing search path to find the location of the sh executable in the system path.

    #include <iostream>
    #include <cstdlib>
    #include <boost/process/search_path.hpp>
    #include <string>
    
    int main()
    { 
        auto myPath = boost::process::search_path("sh");
    
        std::cout << "sh executable path " << myPath << std::endl;
    
    }
    

    Live Environment to test: https://wandbox.org/permlink/c3TbKq4sliBjxRVc

    Output:

    Start
    sh path "/bin/sh"
    0
    Finish