首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >_mkdir故障的故障排除

_mkdir故障的故障排除
EN

Stack Overflow用户
提问于 2011-06-30 13:04:38
回答 4查看 2.4K关注 0票数 2
代码语言:javascript
复制
#include <iostream>
#include <direct.h>
using namespace std;
int main() {
 if( _mkdir("d:\\a\\b") == 0 ){
   cout << "success";
 }    else if (  _mkdir("d:\\a") == EEXIST ) {
   cout << "Directory was not created because dirname is the name of an existing   file, directory, or device.";
      }
         else if (  _mkdir("d:\\a") == ENOENT ) {
      cout << "Path was not found.";
    }
}

在运行程序时,输出是意外的。(大多数情况下是失败的。)我不知道原因)

有时我看到success.Many次数,如果我删除双斜杠\\和单斜杠\,那么消息就是成功。这东西让我很生气。为什么会发生这种事?backslashes是问题所在吗?

更新

在visual c++ 2010速成版中,当我按下CTRL+F5时,输出仅为,按任意键继续.

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-30 13:10:32

双斜杠是正确的。检查错误号以找出其失败的原因:

如果创建了新目录,这些函数中的每个都返回值0。对于错误,函数返回-1并将errno设置为: 由于dirname是现有文件、目录或设备的名称,所以没有创建目录。ENOENT -路径未找到。

请注意:

_mkdir只能在每次调用中创建一个新目录,因此只有dirname的最后一个组件才能命名一个新目录。

可能的原因:

  • 您正在尝试使用相同的调用同时创建ab (使用SHCreateDirectoryEx()代替)
  • 该目录已经存在。
票数 6
EN

Stack Overflow用户

发布于 2011-06-30 13:10:05

在你的情况下,你对失败意味着什么相当含糊。这是否与您试图同时创建多个文件夹的事实有关?

只有当d:\a\b已经存在时,才能创建d:\a文件夹。否则,您需要先创建d:\a,然后创建d:\a\b

这是我写的代码可以正确地创建任意深度的目录。

票数 4
EN

Stack Overflow用户

发布于 2011-06-30 13:39:43

请注意,_mkdir不返回ENOENT或EEXIST,这是调用_mkdir后的errno值。如果_mkdir失败,它将根据文档返回-1。

http://msdn.microsoft.com/en-us/library/2fkk4dzw(v=vs.80).aspx

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6535182

复制
相关文章

相似问题

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