2012/05/12

[C++] 디렉토리 존재 검사 및 생성

주어진 파일 또는 경로의 존재 유무를 확인하고 필요에 따라 상위 경로부터 생성을 하는 함수


//////////////////////////////////////////////////////////////////////////
/**
@brief checkPath

@details
Path 존재 유무 검사 및 생성

@param[in] strAbsFullPath 검사를 하고자 하는 전체경로 (파일명 포함)
@param[in] bCreate 존재하지 않을 경우 폴더 생성 여부

@return
0: 주어진 경로가 존재
-1: 주어진 경로가 존재하지 않음 (bCreate == false 일경우)
-2: 주어진 경로 생성 시도 실패
*/
int checkPath( const CString& strAbsFullPath, bool bCreate )
{
TCHAR Drive[_MAX_DRIVE];
TCHAR Path[_MAX_DIR];
TCHAR Filename[_MAX_FNAME];
TCHAR Ext[_MAX_EXT];
_tsplitpath_s(strAbsFullPath
, Drive, _MAX_DRIVE
, Path, _MAX_DIR
, Filename, _MAX_FNAME
, Ext, _MAX_EXT
);

TCHAR szFullPath[_MAX_PATH];
_stprintf_s( szFullPath, _MAX_PATH, _T("%s%s\0"), Drive, Path );

// Check Directory
if ( _taccess( szFullPath, 0 ) == 0 ) // If Exists
{
return 0;
}

if ( bCreate )
{
TCHAR* pPath = szFullPath;
TCHAR* pCur = szFullPath;
while ( true )
{
if ( *pCur == _T('\') || *pCur == _T('/') || *pCur == _T('\0') )
{
TCHAR ch = *pCur;
*pCur = _T('\0');

// Check Directory
if ( _taccess( pPath, 0 ) != 0 ) // If Not Exists
{
if ( ::CreateDirectory( pPath, NULL ) == FALSE )
{
return -2; // Fail to create Directory
}
}

*pCur = ch;

if ( *pCur == _T('\0') )
{
break;
}
}
++pCur;
}
}
else
{
return -1; // Directory is Not Exist
}

return 0;
}
<

Original Post : http://neodreamer-dev.tistory.com/650

No comments :

Post a Comment