【问题标题】:How to check OS version in a cross platform fashion with C++?如何使用 C++ 以跨平台方式检查操作系统版本?
【发布时间】:2011-10-08 01:02:18
【问题描述】:

嗯,我认为这个问题是相当客观的。那么,到底有没有办法呢?

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

"directory/file.ext"

"directory\file.ext"

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

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

我可以用 C# 很好地做到这一点,这将是我最后的选择。

提前致以最诚挚的问候和感谢!

【问题讨论】:

  • 你可以用 Qt 来做,它会为你处理所有跨平台的东西。

标签: c++ string operating-system


【解决方案1】:

实际上,您不需要这样做。 POSIX 样式“/”可以很好地用作目录分隔符,即使在 Win32 系统上也是如此(试试看。)

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

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 上我会得到一个“/”作为输入...
  • 我明白了——如果你正在解析路径以在你的程序中使用,而不是使用像 Boost Filesystem 这样的路径规范化库,那么你要么需要检查两者,要么使用#ifdef WIN32 ,正如米格尔建议的那样。在编译时这样做很好,因为 Windows 的 C++ 二进制文件不会在 Linux 上运行(通过 Wine 或模拟器除外,在这种情况下“\”路径很好)。
  • 是的,我在发表评论后考虑过...对不起!
【解决方案2】:

您可以使用#ifdef WIN32 来确定您是否在Windows 上。这甚至适用于 64 位 Windows。

【讨论】:

  • 那会检查编译时间...我想要一个运行时指令...很像 C# 上的 Environment.OSVersion
  • 为什么?由于您无法构建一次并部署到 Windows 和 linux,除非您使用仍然期望 Windows 样式路径的 Wine...
  • 是的,我在发表评论后考虑过...对不起!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 2012-02-05
相关资源
最近更新 更多