//-----------------------------------------------------------------------------
// フォルダ生成
//-----------------------------------------------------------------------------
// BOOL CreateDirectoryEx(
// LPSTR pathname // 生成フォルダ名
// );
//-----------------------------------------------------------------------------
BOOL CreateDirectoryEx(LPSTR pathname)
{
HANDLE ff = NULL; // FindFirstFileのハンドル
WIN32_FIND_DATA fdata; // FindFirstFileの属性格納先
SECURITY_ATTRIBUTES attr; // CreateDirectoryのセキュリティ記述子
CHAR wpathname[MAX_PATH] = ""; // 作業パス
LONG n = 0,l = lstrlen(pathname);
while(n < l){
// 次のフォルダまでを格納
while(n < l){
if(pathname[n] == '\\'){
if(n > 0){
if(wpathname[n - 1] != ':')break;
}else{
break;
}
}
wpathname[n] = pathname[n];
n++;
}
wpathname[n] = '\0';
// フォルダの有無チェックを行い、必要ならフォルダ生成
if((ff = FindFirstFile(wpathname,&fdata)) == INVALID_HANDLE_VALUE){
// 見つからないとき、フォルダ作成
attr.nLength = sizeof(SECURITY_ATTRIBUTES);
attr.lpSecurityDescriptor = NULL;
attr.bInheritHandle = FALSE;
if(!CreateDirectory(wpathname,&attr))return FALSE;
}else{
// 見つかった名前がフォルダ以外のとき、エラーを返す
FindClose(ff);
if((fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0){
return FALSE;
}
}
wpathname[n] = '\\';
n++;
}
return TRUE;
}