在日常开发中进行目录的判断以及创建可以说的上是家常便饭了,在进行一层目录 的创建比较简单,直接调用CreateDirectory即可实现。在VS中点击F12即可看到其定义如下:
#ifdef UNICODE
#define CreateDirectory CreateDirectoryW
#else
#define CreateDirectory CreateDirectoryA
可以看到其有两种格式,其实是分别对应多字节和unicode字节,内部实现原理都一样,这里就选择多字节模式讲解一下,选中CreateDirectoryW按下F12,看到函数声明如下:
WINBASEAPI
BOOL
WINAPI
CreateDirectoryA(
__in LPCSTR lpPathName,
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes
);
参数意义:
lpPathName:将要创建的文件夹路径
lpSecurityAttributes:安全属性指针,创建一般性的目录时传入NULL即可;指针定义如下
typedef struct _SECURITY_ATTRIBUTES {
DWORD nLength;
LPVOID lpSecurityDescriptor;
BOOL bInheritHandle;
} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
它在创建文件、进程、管道……的时候会用到,这里就不详细进行讲解了,想要了解更详细的内容可以点击这里进行查看。
返回值为BOOL类型,创建成功返回值为TRUE,创建失败返回值为FALSE。
创建以及目录如下:
char * path = "D:\\CreateFoderTest\\myFolder";
if (!CreateDirectory(path, NULL))
{
printf("创建目录%s失败", path);
}
注意:CreateDirectory只能进行一级目录的创建!
什么意思呢?就是当“D:\\CreateFoderTest”这个目录不存在,甚至连D盘都不存在时就会创建失败。
当创建失败时,可以通过获取系统返回的错误码来了解为什么么会创建失败。在以下链接中有如果获取系统错误码的方法和错误原因:
https://blog.csdn.net/tormi21c/article/details/101875070
如果要进行多级目录的创建时,可以采用递归的方法进行创建,实现如下:
BOOL CreateAllDirectories(const char* dir)
{
int len = strlen(dir);
const char * sub = strrchr(dir, '\\');
int sublen = strlen(sub);
int pahtLen = len - sublen + 1;
char path[1024];
memset(path, 0, sizeof(path));
strncpy(path, dir, len-sublen);
if(GetFileAttributes(dir)!=-1)
return FALSE;
if (nullptr != strrchr(path, '\\'))
{
CreateAllDirectories(path);
}
return CreateDirectory(path, NULL);
}

580

被折叠的 条评论
为什么被折叠?



