I am writing a cross-platform application that needs to inspect and manipulate Windows-paths.
Specifically, for the particular problem I am having now, I need to know if a path is absolute or relative.
The current code uses boost::filesystem::path which of course works like a charm on Windows:
boost::filesystem::path the_path(the_path_as_a_string);
if (!the_path.has_root_path()) { /* do stuff */ }
The problem with this approach is that boost::filesystem::path only has two modes: native and portable. This means that the Windows path grammar is unavailable when I compile under Linux (it is #ifdefed out in the source). Hence, the path "C:\path" is considered absolute in Windows, but relative in Linux.
Can you guys recommend a cross-platform C++ library that can inspect and manipulate Windows-paths?
For now, the only Windows-path operation I will do is to check whether a path is absolute or not.
The criterion I will use for an absolute path is that it both contains a drive letter, and the path starts with \. An example of an absolute path under this criterion is C:\path. These are both examples of relative paths under this criterion: C:path, \path.
It seems to be difficult to find a library for this. One possibility is PathIsRelative in Winelib, but I don't want to use Winelib.
I ended up doing a very specific solution just for deciding this small thing. Assuming that the path is correct (a fair assumption in my case), an absolute path will contain :\, while a relative path will not.
So, the bad, but working, solution is: There is no suitable library. Check for existence of :\.
What about QT with QFileInfo ?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With