如何使用C ++跨平台检查操作系统版本?

3

嗯,我认为这个问题相当客观。那么,有没有什么办法可以做到呢?

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

"directory/file.ext"

或者

"directory\file.ext"

所以,根据操作系统的不同,我会将其中一个字符串按照“\”或“/”进行分割。

我对C++还比较新,不知道是否有其他方法可以从路径字符串中获取目录。

在C#中,我可以很好地完成这项工作,但这是我的最后选择。

最好的问候和提前致谢!


你可以用Qt来完成它,它会为你处理所有跨平台的问题。 - Daniel
2个回答

5
实际上,你不需要这样做。在Win32系统上,POSIX风格的“/”将作为目录分隔符完美地运行(试试看)。 也就是说,其他文件系统操作是特定于平台的(例如驱动器字母)。 Boost Filesystem库是一个很好的选择 - 编写代码并处理平台细节: http://www.boost.org/doc/libs/1_31_0/libs/filesystem/doc/index.htm。 其他跨平台的C++框架,例如Qt,也有类似的功能。您可以在此深入了解:http://en.wikipedia.org/wiki/Path_(computing)

即使是分割字符串?我不这么认为... 当在Windows上时,我会得到“\”作为输入,而当在Linux上时,我会得到“/”作为输入... - Girardi
1
我明白了——如果您正在解析路径以供程序使用,而未使用类似于Boost Filesystem的路径规范化库,则需要检查两者,或者像Miguel建议的那样使用#ifdef WIN32。这在编译时执行是可以接受的,因为用于Windows的C++二进制文件将无法在Linux上运行(除非通过Wine或模拟器,在这种情况下"\ "路径很好用)。 - holtavolt
是的,我在发表评论后想到了这一点...抱歉! - Girardi

1

你可以使用#ifdef WIN32来确定你是否在Windows上运行。即使在64位的Windows上也可以这样使用。


那会在编译时检查... 我想要一个运行时指令... 就像C#上的Environment.OSVersion。 - Girardi
2
为什么?因为除非你使用 Wine,否则无法一次构建并部署到 Windows 和 Linux,而 Wine 仍然期望 Windows 风格的路径... - Chad
是的,我在发表评论后想到了这一点...抱歉! - Girardi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接