C++ 如何将字符串路径从'\';至'/';或'\\';?

C++ 如何将字符串路径从'\';至'/';或'\\';?,c++,boost,C++,Boost,我想以编程方式打印包含'\'的Windows样式路径。我们将使用这个字符串递归地列出该目录中的所有文件。出现此问题的唯一原因是我正在从远程生成服务器上的宏集读取字符串,在远程生成服务器上,宏路径似乎是使用'\'设置的。但是,结果字符串在C++中是不可用的,因为在 \ \ \代码>之后的任何字符都是一个特殊字符。 背景故事: 在我的机器上构建项目与构建服务器之间存在不兼容性问题,对于某些包含目录,构建服务器可能具有不同的宏。我想打印由项目宏定义的目录的内容,例如$(OpenCVDir)。假设$(O

我想以编程方式打印包含
'\'
的Windows样式路径。我们将使用这个字符串递归地列出该目录中的所有文件。出现此问题的唯一原因是我正在从远程生成服务器上的宏集读取字符串,在远程生成服务器上,宏路径似乎是使用
'\'
设置的。但是,结果字符串在C++中是不可用的,因为在<代码> \ \ \代码>之后的任何字符都是一个特殊字符。 背景故事: 在我的机器上构建项目与构建服务器之间存在不兼容性问题,对于某些包含目录,构建服务器可能具有不同的宏。我想打印由项目宏定义的目录的内容,例如
$(OpenCVDir)
。假设
$(OpenCVDir)
在这台机器上被定义为
“c:\opencv”

我发现这样做的一种方法是在预处理器命令中定义
OPENCVDIR=$(OPENCVDIR)
,然后在我的代码中,将其打印出来,就像在
中定义一样,例如

std::cout<< OPENCVDIR;
std::cout您可以使用来自boost的

然后

boost::filesystem::path slash("/");
boost::filesystem::path::string_type preferredSlash = slash.make_preferred().native();

结合Remy和ΦXocę的答案웃 Пepeúpaツ,

  • 在预处理器命令中,定义
    OPENCVDIR=R“($OPENCVDIR)”
    ,使
    '\'
    按字面意思而不是使用转义字符。一旦开始执行,字符串实际上是
    “c:\\opencv”

  • (可选)使用boost显式转换为
    '\\'
    '/'

    boost::filesystem::path slash(OPENCVDIR);
    boost::filesystem::path::string_type preferredSlash=slash.make_preferred().native();
    

  • \
    \\
    之间的区别只适用于编译时,而不适用于运行时。仅在中处理。如果所讨论的字符串位于编译时预处理器宏中,您可以尝试将其包装在
    R“(…)”
    中,使其成为禁用转义序列处理的一个选项。您是正确的,我收到一个编译时错误,因为“o”是无法识别的转义字符。由于这是在我无权访问的生成系统上,因此我无法将宏包装在R“()”中。有没有办法把它们转换成我喜欢的类型并让它通过编译?好的,我想我明白你的意思了:在预处理器命令中,我会把它包装在R“()”中。这可以工作,可以编译,我以后可以操作它。谢谢你的回复。正如Remy指出的,因为宏是在编译时使用的,所以它会显示一个警告,所以我们甚至不能在字符串上运行这些函数。有没有办法预先格式化字符串?