boost filesystem canonical path is not valid after conversion to const char *

4.3k Views Asked by At

I am trying to transform a relative path and convert it to absolute to pass to SQLite using boost filesystem. This is supposed to work correctly for windows and linux

    boost::filesystem::path path("../../data/dominion");
    boost::filesystem::path file("dominion.db");
    boost::filesystem::path canonical = boost::filesystem::canonical(dataPath / file);

canonical returns

   m_pathname=L"D:/Users\\me\\Documents\\tonkatsu\\data\\dominion\\dominion.db" 

As you can see the beginning of the path "D:/" is not correct. I also tried to call normalize() on it without success

Is there a way to remedy to this ?

1

There are 1 best solutions below

4
outlyer On BEST ANSWER

Despite not being standard practice, forward slashes are also accepted on Windows, that's why boost isn't forcing the conversion.

However, some libraries won't accept forward slashes. boost::filesystem::path::make_preferred()[1] is meant to solve such situations, by converting the path to the system's preferred representation (i.e. using backslashes on Windows).

[1] This older reference makes that behaviour more obvious

As discused below, while (most of) the Windows API accepts forward slashes, and even a mixture of forward and backslashes, some user interfaces even on applications included in Windows don't.