【问题标题】:boost::filesystem::path gives only first charboost::filesystem::path 只给出第一个字符
【发布时间】:2019-09-29 13:48:06
【问题描述】:

我将一些可执行文件的路径存储在 boost::filesystem::path 中。 当我尝试将它与像 create_directory 这样的标准增强功能一起使用时,我发现没有任何效果。 当我打印存储在 boost::filesystem::path 中的值时,我只得到第一个字符。

const std::string path("c:\\test\\file");
boost::filesystem::path p(path);
printf("%s\n", p.c_str());

我希望在控制台中看到“c:\test\file”,但只得到“c”。

在 Linux 上,此代码可以按预期完美运行。在 Windows 上,我有我描述的行为。问题的根源是什么?

ps。 boost 库版本是 1.70

【问题讨论】:

  • p.c_str() 是 Windows 上的 Unicode 字符串吗?
  • From documentation: "对于类似 Windows 的实现,包括 MinGW,path::value_typewchar_t"
  • 你是对的,wprintf(L"%s\n", p.c_str());正确打印

标签: c++ windows boost


【解决方案1】:

为了获得std::string 代替 std::wstring 跨平台,你可以使用boost::fileystem::path::string() 代替c_str():

const std::string path("c:\\test\\file");
boost::filesystem::path p(path);
std::cout << p.string();

【讨论】:

    【解决方案2】:

    除了@StPiere的回答(我不能评论因为没有足够的声誉),这不是强制使用

    std::cout
    

    即使有

    boost::fileystem::path::string()
    

    您可以将问题中的代码更改为:

    const std::string path("c:\\test\\file");
    boost::filesystem::path p(path);
    printf("%s\n", p.string().c_str());
    

    【讨论】:

      猜你喜欢
      • 2016-06-02
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 2019-11-18
      • 1970-01-01
      • 2011-01-24
      相关资源
      最近更新 更多