故障排除_mkdir故障
troubleshooting _mkdir failure
#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快速版中,当我按下CTRL+F5时,输出仅为按任意键继续
双斜杠是正确的。检查错误编号以找出失败的原因:
如果创建了新目录,则这些函数中的每一个都返回值0。出现错误时,函数返回–1,并按如下方式设置errno:
EEXIST-目录未创建,因为dirname是现有文件、目录或设备的名称。ENOENT-找不到路径。
注意:
_mkdir每次调用只能创建一个新目录,因此只有dirname的最后一个组件才能命名新目录。
可能的原因:
- 您正在尝试使用同一调用创建
a
和b
(例如使用SHCreateDirectoryEx()
( - 目录已存在
您对失败在您的案例中意味着什么一直很模糊。这可能与您试图同时创建多个文件夹有关吗?
只有在d:a
已经存在的情况下,才能创建文件夹d:ab
。否则,您需要先创建d:a
,然后再创建d:ab
。
以下是我为正确创建任意深度的目录而编写的代码。
请注意,_mkdir不会返回ENOENT或EEXIST,它们是调用_mkdir后errno
的值。如果_mkdir失败,根据文档,它将始终返回-1。
http://msdn.microsoft.com/en-us/library/2fkk4dzw(v=vs.80(.aspx
我也收到了这个错误。在我的案例中,_mkdir()
实际上是在返回13 : EACCESS
。我不能确定为什么,但将分隔符从"\\"改为"/"实际上解决了我的问题。根据这个线程,mkdir()
的行为由平台控制,在我的情况下,我在Windows7上使用VC++2012
。
更新:问题不在于分隔符。为了创建一个文件夹,我递归地尝试创建它的父文件夹,同时检查_mkdir()
的结果。为了创建C:12
,我首先尝试创建C:
,它不仅已经存在,而且创建它的权限也没有被授予。似乎创建文件夹的权限是在实际检查之前检查的,如果它存在!这就是我得到EACCESS
的原因。
- 分段故障(堆芯转储)矢量
- C++中的动态铸造故障
- 数组的指针从不分段故障
- vscode g++链路故障:体系结构x86_64的未定义符号
- 访问被拒绝后,c++中的故障保护代码
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 调试 CUDA MMU 故障
- Geeksforgeeks C 程序故障排除:IEE 754 表示法为十进制
- Arch Linux.AUR 包 mysql 不能用 makepkg 构建.错误:构建 () 中出现故障
- 正在处理故障(堆芯转储)
- 在 Boost::fiber 中引发的BOOST_ASSERT故障 Visual Studio "Debug" 构建
- 如何进行故障排除:未定义对"非虚拟 thunk to ..."的引用
- C++函数过载会导致 SEG 故障
- 分段故障 运行C++代码时出现 SIGSEGV
- 当新的故障时,是否有必要留出一些紧急内存?
- Python & C-C++ 扩展模块案例段故障
- 带升压的 SEG 故障::make_shared / 特征3 内存.h.
- 在 c++ 中,发生故障后是否需要 stream.clear()?
- 分段故障背包问题
- 分段故障 11,从类函数显示动态 C 字符串