创建多级目录,就是给出一个路径,如果中间含有的路径中包含多个目录,且不存在,则自动创建多级路径。

我所了解到的,可以用三种方法创建多级目录。下面分别来介绍一番。【目录和文件夹是同一个意思】

1.【ANSII版本】直接调用创建多级目录API函数MakeSureDirectoryPathExists

使用此函数,首先需要包含头文件Dbghelp.h,如#include 。同时还要导入lib库Dbghelp.lib。导入lib库可以在VS菜单“项目”->“属性”->“配置属性”->“链接器”->“输入”->“附加依赖项”中,输入“Dbghelp.lib.”即可。另外一个是使用预编译指令【#pragma comment(lib,"Dbghelp.lib")】即可。如果不导入lib库,会提示无法解析的外部符号。如果不包含头文件,则提示找不到MakeSureDirectoryPathExists标识符。

函数MakeSureDirectoryPathExists的声明如下:

BOOL WINAPI MakeSureDirectoryPathExists(PCSTR DirPath);

此函数用于创建指定的路径中所有的目录。也就是我们要的多级目录。此函数的名字叫做确保文件夹路径存在,也就是说,如果给定了文件夹,如果存在的目录则忽略,不存在的就全部创建,给定的含有多级不存在的目录都会被创建出来,保证这个给定的路径一定是存在的。此函数只有一个参数,参数的类型是PCSTR,此参数是const char *类型,表示此参数不会被函数修改。同时也表明,此参数不能是Unicode编码的字符串。使用前要将Unicode编码的字符串正确的转换为ANSII编码的字符串,否则路径就是乱码。

此函数只创建文件夹,不创建文件。传入的文件路径如果以文件夹结束,则需要用\作为结束,比如d:\aa\bb\,这样才会创建aa文件夹,并在aa文件夹中创建bb文件夹,如果是d:\aa\bb,则是会创建aa文件夹。当然,你可以直接传入一个文件名的路径,如d:\aa\bb\1.txt,函数会自动提取其中的路径,然后创建没有的文件夹,但是不会创建文件。这样就创建了aa文件夹,且在aa中创建了bb文件夹。

如果参数中的目录都存在或者如果函数参数中的目录不存在,且每一个目录都会被创建,则表示创建成功。如果有目录不存在,且只创建了不存在的目录的部分或者一个也没有创建,表示创建失败,返回FALSE。

路径可以是相对路径,也可以是绝对路径。

特别要注意的一点,MSDN特别提示,所有的DbgHelp函数,都是单线程的。MakeSureDirectoryPathExists函数是其中一个,也是单线程的。如果多个线程同时调用,可能出现异常的行为或者内存错误。所以如果要在多个线程都会用到,要做好同步工作,避免此函数在多个线程中同时执行。单线程中是不会出问题的。