How to open a file with relative path in C++?

28,322

What you are using is not at all a relative path. Sure you are using the relative path syntax but not the actual meaning of what it is.

/../../../../../../source/Project/components/Project/test/file.dat

This path starts with a / which means root then finds it parent which return root again since root has no parent and goes on... The simplified version of this is:

/source/Project/components/Project/test/file.dat

So it will look for folder source in root which of-course doesn't exist.

What you should do is something like this (assuming your code is in project folder):

./test/file.dat

or if it is in some other folder within Project folder you can do something like this:

../test/file.dat

../ take you to the parent of your current code directory which under this case's assumption is Project.

Share:
28,322
Peter111
Author by

Peter111

Updated on December 07, 2020

Comments

  • Peter111
    Peter111 over 3 years

    I am writing test cases right now and I created some test files which I try to read. The absolute path is:

    /home/user/code/Project/source/Project/components/Project/test/file.dat
    

    but testing with an absolute path is bad for obvious reasons. So I try to convert the absolute path into a relative one and I don't know why it doesn't work. I created a file with the relative path

    findme.dat
    

    and I found it in

    /home/user/code/Project/build/source/Project/components/Project/test/findme.dat
    

    so I created the relative path

    /../../../../../../source/Project/components/Project/test/file.dat
    

    but the file is not open and not associated with the is object, std::ifstream is (path);, and the is.is_open() function returns fulse.

    Can you help me?