» Главная
eXcode.ru » Статьи » С / С++ » Система
» Новости
» Опросы
» Файлы
» Журнал



Пользователей: 0
Гостей: 9







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




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

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

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

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



TCHAR sPathTo [] = “c:12345678”;//директория, которую нужно создать

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-х директорий в самом конце пути (наиболее часто встречающаяся ситуация), то код будет работать не намного дольше, а может и вообще быстрее (если вложенность большая).

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





Добавил: MadvEXДата публикации: 2005-10-04 23:27:40
Рейтинг статьи:3.00 [Голосов 5]Кол-во просмотров: 4932

Комментарии читателей

Всего комментариев: 0
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Что для вас важнее в ПО
Его размер
7% (9)
Его цена
7% (8)
Его простота и доступность
17% (20)
Его функциональность
64% (77)
Наличие дополнительных фич
0% (0)
Наличие русского языка
5% (6)
Графицеский интерфейс
1% (1)
Изготовитель
0% (0)

Проголосовало: 121
Компьютерный магазин. Заходит покупатель - толстый упакованный армянин.
АРМЯНИН: День добрый!
ПРОДАВЕЦ: Здравствуйте!
А: Компьютеры есть хорошие?
П: Есть, вот модель - Аквариус.
А: А сколько у него памяти?
П: 4,3 гига винт, 32 метра димм, 4 метра видео, 512 килов кэш.
А: И сколько это вместе?
Рейтинг: 5/10 (1)
Посмотреть все анекдоты

 
eXcode.ru » Статьи » С / С++ » Система