#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.";
}
}
在运行程序时,输出是意外的。(大多数情况下是失败。我不知道原因)
有时我看到成功。很多时候,如果我用单斜杠\\
删除双斜杠\
,则消息成功。
这件事让我很生气。为什么会这样?
问题是backslashes
吗?
更新
在visual c ++ 2010 express版中,当我按 CTRL + F5 时,输出仅按任意键继续......
答案 0 :(得分:6)
双斜线是正确的。检查the error number以找出失败的原因:
如果创建了新目录,则每个函数都返回值0。如果出错,则函数返回-1并按如下方式设置errno:
EEXIST - 未创建目录,因为dirname是现有文件,目录或设备的名称。 ENOENT - 未找到路径。
请注意:
_mkdir每次调用只能创建一个新目录,因此只有dirname的最后一个组件才能命名新目录。
可能的原因:
a
和b
(请使用例如SHCreateDirectoryEx()
)答案 1 :(得分:4)
你对失败在你的情况下意味着什么一直很模糊。是否与您尝试一次创建多个文件夹的事实有关?
如果d:\a\b
已存在,您只能创建文件夹d:\a
。否则,您需要先创建d:\a
,然后创建d:\a\b
。
Here's the code I wrote正确创建任意深度的目录。
答案 2 :(得分:1)
请注意,_mkdir不会返回ENOENT或EEXIST,这些是调用_mkdir后errno
的值。如果_mkdir失败,它将始终根据文档返回-1。
http://msdn.microsoft.com/en-us/library/2fkk4dzw(v=vs.80).aspx
答案 3 :(得分:0)
我也收到了这个错误。就我而言,_mkdir()
实际上正在返回13 : EACCESS
。我无法确定为什么,但是将分隔符从'\\'更改为'/'实际上解决了我的问题。根据{{3}},mkdir()
的行为由平台管理,在我的情况下,我在Windows 7上使用VC++2012
。
更新:问题不是分隔符。要创建文件夹,我会在检查_mkdir()
的结果时递归尝试创建其父项。要创建C:\1\2
,我首先尝试创建不仅已存在的C:
,而且还授予创建它的权限。似乎在实际检查之前检查创建文件夹的权限是否存在!这就是我得到EACCESS
的原因。