您的位置:首页 > 编程语言 > C语言/C++

C++Windows下创建多级目录

2015-10-19 15:40 615 查看
#include <string>
#include <Windows.h>
#include <Shlwapi.h>
#pragma comment( lib, "Shlwapi.lib" )
#include <strsafe.h>
bool CreateMultipleDirectory( LPCTSTR pDirectory )
{
if( NULL == pDirectory )
{
return false;
}
//目录或文件已存在
if( PathFileExists( pDirectory ) )
{
return true;
}

TCHAR Directory[ MAX_PATH ];
StringCbCopy( Directory, sizeof( Directory ), pDirectory );

//判断是否是文件路径( 默认有扩展名被认为是文件,无扩展名文件使用std::fstream来判断是否能打开即可判断,本例中不讨论 )
if( 0 != StrCmp( TEXT( "" ), PathFindExtension( Directory ) ) )
{
//去掉文件名
PathRemoveFileSpec( Directory );
//文件不存在但目录存在
if( PathFileExists( Directory ) )
{
return true;
}
}

//去掉前缀
LPCTSTR i = Directory;
while( ( TEXT( '.' ) == *i || TEXT( '\\' ) == *i ) )
{
++i;
}
//不用创建新文件夹的当前目录( .\\ )
if( 0 == i[ 0 ] )
{
return true;
}
std::wstring Temp;
for( ; *i != 0; ++i )
{
if( TEXT( '\\' ) == *i )
{
if( FALSE == PathFileExists( Temp.c_str() ) &&
FALSE == CreateDirectory( Temp.c_str(), NULL ) )
{
return false;
}
}
Temp.push_back( *i );
}
if( FALSE == PathFileExists( Temp.c_str() ) &&
FALSE == CreateDirectory( Temp.c_str(), NULL ) )
{
return false;
}
return true;
}

int main()
{
//在当前工作目录下创建文件目录
bool a = CreateMultipleDirectory( TEXT( "a\\b\\c\\d\\" ) );
//在当前工作目录下为文件准备目录( 特别适合为新下载文件创建目录 )
bool b = CreateMultipleDirectory( TEXT( "1\\2\\3.txt" ) );
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ Windows 多级目录