C/C++之目录创建

在日常开发中进行目录的判断以及创建可以说的上是家常便饭了,在进行一层目录 的创建比较简单,直接调用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);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值