如何将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()
将做你所需要的。