如何将boost路径类型转换为字符串?

时间:2010-11-14 19:47:14

标签: c++ boost path

您好我目前有一个程序可以获取文件位置的完整路径,并被放入一个变量类型:boost :: filesystem2 :: path

我已经查找了如何执行此操作并找到了使用:

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

将路径转换为字符串但它只转换文件名(例如,如果路径为“C:\ name \ bobsAwesomeWordDoc.docx”,则只返回“bobsAwesomeWordDoc”)。

我发现了如何将整个路径转换为字符串, 但我不知道如何在我的程序中实现它。我尝试了多种方法,但是我遇到了转换错误。

  

const std :: string& string():此例程返回初始化路径的字符串的副本,并根据路径语法规则进行格式化。

(找到here

我试过了:

string result1 = string& (myPath);

以及其他一些变化。

6 个答案:

答案 0 :(得分:142)

您只需致电myPath.string()

答案 1 :(得分:10)

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

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

P.S。 - 我已经使用Boost进行了多年的编程,我无法在文档中轻松找到这些信息。


更新(2017年10月)

文档:boost::filesystem::canonical

但请注意,从C ++ 17开始,有std::filesystemcanonical等等。

答案 2 :(得分:3)

这在wxWidgets中有效:(我知道我应该只使用wx实用程序 但这是一个测试)

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...      
}

答案 3 :(得分:1)

致电myPath.generic_string()将满足您的需求。

答案 4 :(得分:0)

这样做

path.c_str();

你应该没事。

答案 5 :(得分:0)

我个人必须这样做

boost::filesystem::absolute(path).string()

让它工作,如:

path.string()

一直返回相对路径。