#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时,输出仅为,按任意键继续.
发布于 2011-06-30 13:10:32
双斜杠是正确的。检查错误号以找出其失败的原因:
如果创建了新目录,这些函数中的每个都返回值0。对于错误,函数返回-1并将errno设置为: 由于dirname是现有文件、目录或设备的名称,所以没有创建目录。ENOENT -路径未找到。
请注意:
_mkdir只能在每次调用中创建一个新目录,因此只有dirname的最后一个组件才能命名一个新目录。
可能的原因:
a和b (使用SHCreateDirectoryEx()代替)发布于 2011-06-30 13:10:05
在你的情况下,你对失败意味着什么相当含糊。这是否与您试图同时创建多个文件夹的事实有关?
只有当d:\a\b已经存在时,才能创建d:\a文件夹。否则,您需要先创建d:\a,然后创建d:\a\b。
这是我写的代码可以正确地创建任意深度的目录。
发布于 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
https://stackoverflow.com/questions/6535182
复制相似问题