2017-02-15 86 views
-1

当我创建一个boost::filesystem::path对象(boost v1.55)时遇到了这个问题。我无法弄清楚如何从字符串变量或串联字符串创建路径?C++ - 从变量字符串BOOST文件系统路径

//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对象类使用字符串作为我的出发点?

感谢您的任何帮助!

编辑

Link推动/文件系统路径的文件。重新学习C++,所以其中的一些仍然有点凌驾于我的头上......我不太明白这个构造函数是如何在这里工作的......并且真的不知道在这一点上要问什么......“我绝对感谢任何指点。

+2

那么,什么是'String'?你怎么把它变成文档所说的路径''可以构建?你有'String'的定义,你告诉我们。可能是从它或者其它东西请求一个C字符串或者'std :: string'。 – GManNickG

+0

我有点重新学习C++ ...我不记得/以您所问的方式了解'String'的'定义'。已更新以包含指向文档的链接... – RisaAudr

+1

除了您知道什么'String'之外,没有人可以发布[MCVE](http://stackoverflow.com/help/mcve)。 – GManNickG

回答

0

谢谢GManNickG - 你真的设法解决我的问题。我正在使用C++ builder 10.1,并且能够混合String一段时间,为它赋值,等等。实际上,这导致了我的答案 - 在C++ builder中,它希望AnsiString参数能够工作,并且std :: string不会被编译。 C++ Builder 10.1将String定义为AnsiString,而不是std :: string。同样,我对新望C++,所以当using namespace std我没有实现差异化(大部分面向我obj的先验知识是从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 ::转换成Ansi。