Question

Is there a way to obtain the platform's path separator character using Boost.Filesystem? By path separator, I mean / for Unix and \ for Windows.

I already know I can use boost::filesystem::path::operator/ to concatenate two paths together with the appropriate separator character. But I just want either / or \.

I also know I can use #ifdef _WIN32, but I'd prefer that Boost.Filesystem tell me the appropriate separator character.

EDIT: I want to use version 3 of the Boost.Filesystem API, as used in Boost 1.48.

Was it helpful?

Solution

As of version 1.57, Boost now has a better solution, that is just constant char / wchar_t ( dependent on different platforms ): boost::filesystem::path::preferred_separator.

Read http://www.boost.org/doc/libs/release/libs/filesystem/doc/reference.html#Operating-system-examples for more information. There are even more system-dependent features in it.

Simple example:

#include <boost/filesystem.hpp>
#include <iostream>

int main() {
    std::cout << boost::filesystem::path::preferred_separator << std::endl;
}

OTHER TIPS

It seems like boost::filesystem::path::make_preferred is the ticket:

Effects: The contained pathname is converted to the preferred native format. [Note: On Windows, the effect is to replace slashes with backslashes. On POSIX, there is no effect. -- end note]

Example:

namespace bfs = boost::filesystem;
bfs::path slash("/");
bfs::path::string_type preferredSlash = slash.make_preferred().native();

Haven't tested this, but it looks like you should be able to use this on a recent boost:

http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/reference.html

#include <boost/filesystem.hpp>
#include <iostream>

int main() {
    std::cout << boost::filesystem::slash<boost::filesystem::path>::value << std::endl;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top