如何将boostpathtypes转换为string?

你好,我目前有一个程序,获得一个文件的位置的完整path,并把它放入一个types的variables:boost :: filesystem2 :: path

我已经查阅了如何做到这一点,并发现使用:

string result1 = boost::filesystem::basename (myPath) 

将path转换为string,但它只转换文件名(例如,如果path是“C:\ name \ bobsAwesomeWordDoc.docx”,它只是返回“bobsAwesomeWordDoc”)。

我发现如何将整个path转换为string,但我不知道如何在我的程序中实现它。 我已经尝试了多种方式,但我得到转换错误。

const std :: string&string():这个例程返回一个path被初始化的string的一个副本,并且按照path语法规则进行格式化。

(在这里find)

我努力了:

 string result1 = string& (myPath); 

和其他一些变化。

你只需要调用myPath.string()

我相信你需要做的不仅仅是把path转换成一个string – 你应该首先获得path的规范版本 – 一个没有符号链接元素的绝对path – 并将其转换为一个string:

 boost::filesystem::canonical(myPath).string(); 

PS – 我已经用Boost编程了很多年了,我不能轻易地在文档中find这个信息。


更新(2017年10月)

文档: boost :: filesystem :: canonical 。

但是请注意,从C ++ 17开始,有std :: filesystem ,有了canonical等等。

这工作在wxWidgets :(我知道我应该只使用wx实用程序,但它是一个testing)

 void WxWidgetsBoostTestFrame::OnTestBtnClick(wxCommandEvent& event) { boost::filesystem::path currentPath; currentPath = boost::filesystem::current_path(); std::string curDirString; curDirString = boost::filesystem::canonical(currentPath).string(); wxString mystring(curDirString.c_str(), wxConvUTF8); wxMessageBox(mystring); // output: C:/Users\client\Desktop... } 

调用myPath.generic_string()将做你所需要的。