【问题标题】:How to convert boost path type to string?如何将提升路径类型转换为字符串?
【发布时间】:2011-05-09 22:09:10
【问题描述】:

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

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

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

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

我发现了以下关于如何将整个路径转换为字符串的内容, 但我不知道如何在我的程序中实现它。我尝试了多种方法,但出现转换错误。

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

(找到here

我试过了:

string result1 = string& (myPath);

以及其他一些变体。

【问题讨论】:

    标签: c++ boost path


    【解决方案1】:

    您只需拨打myPath.string()

    【讨论】:

    • 是否保证字符串在所有平台上都返回 utf8 编码路径?
    • @SergeyShambir:不幸的是没有。可以显式使用u8string(),但这无助于自动使用string()
    【解决方案2】:

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

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

    附: - 我已经使用 Boost 编程多年,但我无法在文档中轻松找到此信息。


    更新(2017 年 10 月)

    文档:boost::filesystem::canonical

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

    【讨论】:

    【解决方案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...      
    }
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        我个人不得不这样做

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

        让它工作,如:

        path.string()
        

        不断返回相对路径。

        【讨论】:

          【解决方案6】:

          这样做

          path.c_str();

          你应该没事的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-11-23
            • 1970-01-01
            • 2012-09-19
            • 1970-01-01
            • 2022-08-18
            • 2019-01-04
            相关资源
            最近更新 更多