Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c++; 我有一个目标路径和一个文件名,作为字符串,我想用C++来连接它们。_C++_Cross Platform_Filesystems - Fatal编程技术网

如何在c++; 我有一个目标路径和一个文件名,作为字符串,我想用C++来连接它们。

如何在c++; 我有一个目标路径和一个文件名,作为字符串,我想用C++来连接它们。,c++,cross-platform,filesystems,C++,Cross Platform,Filesystems,对于windows或unix系统,是否有办法做到这一点,并让程序/编译器在/和\之间进行选择?正如经常出现的情况一样,Boost有一个库,可以满足您的需要。”这是一个教程。如果您想在编译时完成它,您当然可以执行以下操作 #ifdef WIN32 #define OS_SEP '\\' #else #define OS_SEP '/' #endif 或者您可以只使用“/”,在windows上一切都会正常工作(除了解析字符串并且只使用“\”的旧程序)。如果以这种方式显示给用户,它看起来很有趣。一种

对于windows或unix系统,是否有办法做到这一点,并让程序/编译器在/和\之间进行选择?

正如经常出现的情况一样,Boost有一个库,可以满足您的需要。”这是一个教程。

如果您想在编译时完成它,您当然可以执行以下操作

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

或者您可以只使用“/”,在windows上一切都会正常工作(除了解析字符串并且只使用“\”的旧程序)。如果以这种方式显示给用户,它看起来很有趣。

一种简单的方法是使用一个小的(可能是内联的)函数,该函数使用预处理器魔法来确定平台(
#ifdef WIN32
等),并返回相应的分隔符

答案有点复杂,因为除了分隔符字符之外,还有其他更重要的区别。Windows文件系统可以有多个根(C:\、D:\,等等),而整个FS的根位于/在Unix中


最好的建议可能是在任何地方内部使用“/”。然后编写一组实用程序函数,使用“/”将任一形式的路径导入。编写一个“本机路径”函数,该函数具有系统特定的ifdef和必要的转换。可以按需调用。

我真的需要一个“完整”的库来选择/和\?不,但这不是DOS和Unix文件名之间的唯一区别。实际上,DLASH被DOS(以及反斜杠)接受——但不是由CMD.EXE命令解释器接受。Boost实际上是C++标准库。这不仅仅是一个“完整”的图书馆。正确的答案。也许有更小的LIB,但用“\”和“/”是鲁莽学徒的方式。我还没有用windwos机器测试过它,但如果它能工作,这对我来说就足够了。就目前而言,它能工作。请注意,DOS路径可以以驱动器号和冒号开头(否则,它们是相对于当前驱动器的)。另外,还要注意可选的“forks”和设备名。Windows实际上可以使用正斜杠。Wiki在某些操作系统中还可以使用“:”和“>”和“.”有效的目录分隔符。