首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >确定C++中的Linux或Windows

确定C++中的Linux或Windows
EN

Stack Overflow用户
提问于 2010-07-09 21:32:26
回答 6查看 33.2K关注 0票数 26

我正在用C++编写一个跨平台兼容的函数,它根据输入文件名创建目录。我需要知道机器是Linux还是windows,并使用适当的正斜杠或反斜杠。对于下面的代码,如果机器是Linux,则使用isLinux = true。如何确定操作系统?

代码语言:javascript
复制
bool isLinux;
std::string slash;
std::string directoryName;

if isLinux
   slash = "/";
else
   slash = "\\";
end

boost::filesystem::create_directory (full_path.native_directory_string() + slash + directoryName); 
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-07-09 21:54:07

使用:

代码语言:javascript
复制
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__)
static const std::string slash="\\";
#else
static const std::string slash="/";
#endif

顺便说一句,你仍然可以在Windows上安全地使用这个斜杠"/“,因为windows完全理解这一点。因此,只要坚持使用"/“斜杠,就可以解决所有路径的问题,即使像OpenVMS这样的路径也是如此,其中foo:[bar.bee]test.ext可以表示为/foo/bar/bee/test.ext

票数 47
EN

Stack Overflow用户

发布于 2010-07-09 21:40:00

一般来说,你必须使用条件编译来做这件事。

也就是说,如果你使用的是boost::filesystem,你应该使用portable generic path format,这样你就可以忘记这样的事情了。

票数 13
EN

Stack Overflow用户

发布于 2012-12-26 05:51:08

默认情况下,Visual Studio #define_WIN32位于预处理器项目设置中。

所以你可以使用

代码语言:javascript
复制
// _WIN32 = we're in windows
#ifdef _WIN32
// Windows
#else
// Not windows
#endif
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3213037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档