Это может быть именно то, что вы хотите.
Он не пытается выполнить синтаксический анализ, чтобы определить, является ли путь локальным или общим сервером.
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;
}
Алгоритм довольно прост, просто рекурсивно передайте строку каталога более высокого уровня, в то время как создание текущего уровня каталога завершится неудачей, пока не произойдет один успех или не будет более высокого уровня. Когда внутренний вызов возвращается с успехом, создайте текущий. Этот метод не выполняет синтаксический анализ для определения локального или самого сервера, он соответствует CreateDirectory.
В WINAPI CreateDirectory никогда не позволяет вам создавать «c:» или «\», когда путь достигает этого уровня, метод вскоре переходит к вызову self с помощью path = «», и это тоже не удается. Именно поэтому Microsoft определяет правило именования общего доступа к файлам таким образом, чтобы обеспечить совместимость правила пути DOS и упростить кодирование.