2011-10-08 42 views
3

那么,我认为这个问题是相当客观的。那么,有没有这样做?如何使用C++以跨平台的方式检查操作系统版本?

其实,我需要检查什么版本的操作系统,因为我想从一个字符串获取目录:

"directory/file.ext" 

"directory\file.ext" 

所以我根据这些字符串中的一个分裂“\”或“/”,具体取决于我正在处理的操作系统。

我对C++很陌生,我不知道从路径字符串获取目录的方法。

我可以很好地用C#来完成,这将是我的最后一种选择。

此致敬意!

+0

你可以用Qt来做,它会照顾所有的跨平台的东西给你。 – Dani

回答

5

其实,你不需要那样做。 POSIX的风格“/”将作为目录分隔符就好了,即使是在一个Win32系统(尝试一下。)

也就是说,其它文件系统操作平台特定的(驱动器号,例如。)

升压文件系统库是一个不错的选择 - 码到这一点,它会处理平台的细节为您提供:http://www.boost.org/doc/libs/1_31_0/libs/filesystem/doc/index.htm

其他跨平台的C++框架,比如Qt的,也有类似的设施。

您可以深入更多的细节在这里:http://en.wikipedia.org/wiki/Path_(computing

+0

即使是分割字符串?我不这么认为......我会在Windows上输入“\”作为输入,在Linux上输入“/”作为输入... – Girardi

+1

我明白了 - 如果您要解析程序中使用的路径,而不是使用像Boost Filesystem这样的路径规范化库,那么你需要检查两者,或者像Miguel所说的那样使用#ifdef WIN32。在编译时这样做很好,因为Windows的C++二进制文件不能在Linux上运行(除了通过Wine或模拟器,在这种情况下“\”路径没有问题)。 – holtavolt

+0

是的,我在发表评论后想过这个...对不起! – Girardi

1

您可以使用#ifdef WIN32来决定,如果你是在Windows上。即使在64位Windows上也是如此。

+0

这将检查编译时间...我想要一个运行时指令...很像C#上的Environment.OSVersion# – Girardi

+2

为什么?既然你不能构建一次,并部署到Windows和Linux,除非你使用的Wine仍然会期望Windows风格的路径... – Chad

+0

是的,我发表评论后想过...对不起! – Girardi

相关问题