これはまさにあなたが望むものかもしれません。パスがローカルかサーバー共有かを区別するための解析は行いません。
bool TryCreateDirectory(char *path){
char *p;
bool b;
if(
!(b=CreateDirectory(path))
&&
!(b=NULL==(p=strrchr(path, '\\')))
){
size_t i;
(p=strncpy((char *)malloc(1+i), path, i=p-path))[i]='\0';
b=TryCreateDirectory(p);
free(p);
b=b?CreateDirectory(path):false;
}
return b;
}
アルゴリズムは非常に単純です。より高いレベルのディレクトリの文字列を再帰的に渡すだけで、現在のレベルのディレクトリの作成は、1 つ成功するか、より高いレベルがなくなるまで失敗します。内部呼び出しが成功して返されたら、current を作成します。このメソッドは、ローカルまたはサーバー自体を決定するために解析しません。CreateDirectory に従っています。WINAPI では、パスがそのレベルに達したときに CreateDirectory で "c:" または "\" を作成することはできません。メソッドはすぐに path="" を使用してそれ自体を呼び出すようになり、これも失敗します。Microsoft がファイル共有の命名規則をこのように定義している理由は、DOS パス規則との互換性とコーディング作業の簡素化のためです。