如何在c++中生成操作系统无关路径

3gtaxfhh  于 2022-12-15  发布在  其他
关注(0)|答案(5)|浏览(156)

我有一个目标路径和一个文件名作为字符串,我想用c++连接它们。
有没有办法做到这一点,让程序/编译器在/和\之间选择windows或unix系统?

kx1ctssn

kx1ctssn1#

如果你想在编译时完成它,你当然可以这样做

#ifdef WIN32
#define OS_SEP '\\'
#else
#define OS_SEP '/'
#endif

或者你可以只使用“/”,在windows上一切都很好(除了旧的程序解析字符串,只使用“\”),只有这样显示给用户时才看起来很有趣。

anauzrmj

anauzrmj2#

正如经常出现的情况一样,Boost有一个库可以做你想做的事情。Here是一个教程。

mjqavswn

mjqavswn3#

在内部任何地方使用“/”。然后编写一组实用函数,使用“/”将任一形式的路径导入。编写一个“native path”函数,该函数具有系统特定的ifdef和必要的转换。可以根据需要调用。

kx1ctssn

kx1ctssn4#

一种简单的方法是使用一个小的(可能是内联的)函数,该函数使用预处理器魔术来确定平台(#ifdef WIN32等)并返回适当的分隔符。
答案有点复杂,因为除了分隔符之外,还有其他更重要的区别。Windows文件系统可以有多个根目录(C:\,D:\,等等),而整个文件系统的根目录都是/。
最好的建议可能是使用boost::filesystem

lokaqttq

lokaqttq5#

  1. /可移植(适用于XP之后的Windows)
    1.为了安全起见,从C++17开始:std::filesystem::path::preferred_separator,成员常量。
    参见:https://en.cppreference.com/w/cpp/filesystem/path
    使用std::filesystem::path对象。操作如同处理字符串一样完成。可以通过operator/=进行连接
    例如,
std::filesystem::path myPath = "abc/def";
myPath /= "hij"; // after a slash
myPath += "klm"; // no slash prepended

std::cout << myPath.c_str() << '\n';

结局:abc/def/hijklm

相关问题