24.01.2007, 16:42
общий
это ответ
Здравствуйте, DEVILL!
По первому вопросу:
необходимо создать цикл с таким количеством проходов, сколько Вам нужно директорий первого уровня. В теле цикла формируем новую строку с именем директории исходя из заданного начального имени и счетчика цикла. Затем создаем директорию.
По второму вопросу:
в этом же цикле вызываем другую нашу функцию, которая и создает в только что созданной директории новую.
в приложении я набросал код, который решает Вашу ЧАСТНУЮ задачу. Это Вам в качестве примера.
Для того, чтобы создать универсальное решение, необходимо писать рекурсивную функцию, которой в качестве параметра передавать необходимый для создания путь. Эта функция должна последовательно от верхней до нижней перебрать все директории, присутствующие в этом пути, проверить их существование и, если они не существуют, то создать их.
Всего доброго.
ЗЫ: Вашу прагму argsused я из кода убрал, т.к. у меня не Borland C++. Также я переименовал переменные в соответствии с той нотацией, которую использую. Уж не обессудьте. Ну и все строки и символы я заключил в макрос TEXT(), который поможет Вам при компиляции одного и того же кода в ANSI и в UNICODE формате.
Приложение:
#include <windows.h>#include <strsafe.h>BOOL path_CheckName(LPTSTR szBuf, size_t cchPath){ size_t cchlen; if (!szBuf) return FALSE; if (FAILED(StringCchLength(szBuf, cchPath, &cchlen)) || cchlen == 0) return FALSE; if (szBuf[cchlen - 1] != TEXT(‘\\‘)) { szBuf[cchlen] = TEXT(‘\\‘); szBuf[cchlen + 1] = TEXT(‘\0‘); } return TRUE;}BOOL CreateSubDir(LPTSTR lpPath, size_t cchPath, LPTSTR lpDir){ path_CheckName(lpPath, cchPath); if (SUCCEEDED(StringCchCat(lpPath, cchPath, lpDir))) { CreateDirectory(lpPath, NULL); return TRUE; } return FALSE;}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ LPCTSTR lpPath = TEXT("C:\\New_Folder"); TCHAR szFolder[MAX_PATH]; int i; for (i = 1; i < 11; i++) { StringCchPrintf(szFolder, MAX_PATH, TEXT("%s %u"), lpPath, i); CreateDirectory(szFolder, NULL); CreateSubDir(szFolder, MAX_PATH, TEXT("Dir 1")); } return 0;}