Приветствую Вас ГостьЧетверг, 31.07.2025, 15:17

Light Midnight Inc.


Каталог статей

Главная » Статьи » Программирование » С/С++/MFC

Создание директории

Штука достаточно простая, большинство бы и так догадалось как делать, но иногда нужно просто держать сухим нужный кусок кода, вынуть его из заначки и применить.

Расскажу – как нужно делать.
Нужно воспользоваться API-шной функцией CreateDirectory. Функция – повторюсь, из WinAPI, в MFC ничего подобного нет. Несколько раз видел в ответ на скупой и лаконичный ответ "CreateDirectory” вопрос "Это у какого класса такой метод?”. Вопрос подобный повергает меня в смущение, но это уже оффтопик.

А теперь рассмотрим очень часто встречающуюся ситуацию, когда при создании директории "C:\\1\\2\\3\\4” в момент попытки создания не существует ни директории 1, ни 2, ни 3, ни 4. В общем – создать её в этом случае одним вызовом CreateDirectory() не удастся.
Тогда можно воспользоваться обещаным куском кода.

Данный код не привязан к Visual C++ или, например, lcc (на котором он и был написан), и вообще к С++ (на Дельфи ситуация будет выглядеть очень похоже, сдецл поменияется только синтаксис).



TCHAR sPathTo [] = "c:\\1\\2\\3\\4\\5\\6\\7\\8”;//директория, которую нужно создать

bool AQLCreateDirectory(TCHAR * sPathTo)
{
//пока директория не создана, будем пытаться её создать//
while(CreateDirectory(sPathTo, NULL) == FALSE)
{
/* директория не создана, поэтому нужно сначала создать ”предыдущую” директорию */
TCHAR sTemp[MAX_PATH];
int k = strlen(sPathTo);
strcpy(sTemp, sPathTo);

//пытаемся найти и создать директорию самого "нижнего” уровня
while(CreateDirectory(sTemp, NULL) != TRUE)
{
/* пытаемся найти первичные половые признаки предыдущей директории.... */
while(szTemp1[--k] != '\\')
{
if(k<=1)
return FALSE;/* похоже, что директория создана быть вообще не может!
sTemp[k] = NULL;
}
/* ......а как только нашли - создать её */
}
//во время первого прохода будет создана директория "1”, во время второго – "2” и т.д.
}
return TRUE;
}



В общем, код достаточно простой, и ясен почти без комментариев.
Более того: его можно изменить. Например: разобрать один раз строку с исходным путём, и потом создать подряд все директории, начиная с первой (может уменьшиться время потраченое на разбор строки), но могу сказать, почему я этого не сделал. Если не хватает 1-ой 2-х директорий в самом конце пути (наиболее часто встречающаяся ситуация), то код будет работать не намного дольше, а может и вообще быстрее (если вложенность большая).

Причин, по которым директория не может быть создана может быть много, например - у пользователя не хватает прав. В этом случае код можно расширять и дополнять. 

Категория: С/С++/MFC | Добавил: Cromartie (31.01.2013)
Просмотров: 588 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Наш опрос
Оцените мой сайт
Всего ответов: 543
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Реклама
Cheсking
Часы
Мини-чат
200
Друзья Сайта
  • Light Midnight - Ваша Еда
  • Light Midnight - Anim as life style
  • Поиск