2009-06-29 48 views

回答

7

如果你想在编译的时候,你当然可以这样做

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

或者你可以只用“/”,事情会工作得很好的窗口(除了解析旧的程序做字符串,只能使用'\')。如果以这种方式显示给用户,它看起来很有趣。

7

正如情况经常如此,Boost有一个库,它可以做你想做的。 Here是一个教程。

+1

我真的需要一个“完整”库来选择/还是\? – Janusz 2009-06-29 02:49:42

+3

不,但这不是DOS和Unix文件名之间的唯一区别。事实上,斜杠被DOS(以及反斜杠)接受 - 但不能由cmd.exe命令解释器接受。 – 2009-06-29 03:20:43

1

一个简单的方法来做你要求的是有一个小的(可能是内联)功能,使用预处理器魔术来确定平台(#ifdef WIN32等)并返回相应的分隔符。

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

最好的建议可能是使用boost::filesystem

2

无处不在内部使用'/'。然后编写一组实用函数,将任一形式的路径导入为'/'。编写一个具有系统特定ifdefs和必要转换的“本机路径”功能。可以根据需要调用。

相关问题