因此,我必须预先承认我已经知道答案了。我要问的是,碰巧遇到相同问题的其他人可以找到解决方法,以解决由于文档不正确而导致的问题。

我的环境是在Windows 7上开发的VS 2015 C ++,wxWidgets 3.0.2。

在某些旧版代码中,未检查对wxMkDir的调用是否成功。根据wxWidgets documentation,wxMkDir的返回类型为bool,如果成功,则返回true。但是,成功时返回0。

为什么?

最佳答案

答案有两个:有两个名称相似的函数wxMkdir and wxMkDir,前者已记录在案,而后者未记录在案。第二部分是它们将表现相同的看似有效的假设不是有效的假设。

未记录的函数wxMkDir映射到wxCRT_MkDir,后者又映射到wxCRT_MkDirA,然后映射到wxPOSIX_IDENT(mkdir),后者为所提到的POSIX函数mkdir创建一个平台相关的名称。根据POSIX documentation for mkdir


  成功完成后,mkdir()将返回0。否则,将返回-1,不创建任何目录,并且应设置errno来指示错误。


因此,条件如下:

if (!wxMkDir(newDir)) {
  // handle the error here
}


将失败,但是:

if (wxMkDir(newDir) != 0) {
  // handle the error here
}


根据目录是否已创建,将按预期工作。

已记录的函数wxMkdir在wx源文件filefn.cpp中实现,并使用mkdir,但具有上述条件,以映射到适当的bool返回值。

10-08 18:08