c++ - 来自变量字符串的 BOOST 文件系统路径

c++ - BOOST filesystem path from variable string

我在创建 boost::filesystem::path 对象时 运行 遇到了这个问题 (boost v1.55)。我不知道如何从字符串变量或字符串串联创建路径?

//Example 1
namespace fs = boost::filesystem;
String dest = "C:/Users/username";  
fs::path destination (dest); //Error here

//Example 2
namespace fs = boost::filesystem;
String user = "username";
fs::path destination ("C:/Users/" + user); //Error here as well.

//Example 3
namespace fs = boost::filesystem;
fs::path destination ("C:/Users/username");

我只能在像上面的示例 3 那样在双引号之间指定整个字符串时创建路径对象,但这不允许变量输入。

基本上,我如何使用字符串作为起点来实现 fs::path 对象 class?

感谢您的帮助!

编辑

Link 到 boost/filesystem 路径文档。重新学习 c++,所以其中一些仍然有点难以理解……我不太明白构造函数在这里是如何工作的……而且现在真的不知道该问什么……我非常感谢任何指点。

谢谢 GManNickG - 你真的设法解决了我的问题。我正在使用 C++ builder 10.1,并且能够在一段时间内弄乱 String,为其分配值等。实际上是 ShowMessage() method 让我得到了答案 -在 c++ builder 中,它需要一个 AnsiString 参数来工作,而 std::string 不会编译。 C++ Builder 10.1 将 String 定义为 AnsiString,而不是 std::string。同样,我是 c++ 的新手,所以当 using namespace std 时我没有意识到其中的区别(我对 Obj Oriented 的大部分先验知识来自 java,您将字符串定义为 String

//Working Example in C++ Builder 10.1 Starter
namespace fs = boost::filesystem;
std::string un = "/username";
std::string dest = "C:/Users" + un;  //concatenation test
fs::path destination (dest); //Works, no compiler error now

std::string pathStdString = destination.string(); //retrieve 'dest' as std:string from path
String pathAnsiString = pathStdString.c_str(); //Converts std::string to ansi

ShowMessage(pathAnsiString); //Output box showing the path (valid in C++ Builder)

希望这可以帮助遇到类似问题的其他人。另外,link 如何 std::converts Ansi 以防有人发现它有用。