![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
4ygynOK |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 10.10.2013 Репутация: нет Всего: нет |
Есть вот такой вот код:
предназначен для удаления директории используя базу данных.
используется для составления списка.
собственно для удаления каталогов. Данный код можно использовать до уровня вложенности 2. Для меня стоит задача переделать его до любого уровня вложенности. Помогите пожалуйста все разъяснения дам без проблем. |
||||||
|
|||||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Сделай рекурсивную функцию, которая получает путь к каталогу и сначала вызывает себя рекурсивно для всех подкаталогов, а затем удаляет все файлы из указанного каталога и сам каталог, путь к которому передан параметром.
|
|||
|
||||
4ygynOK |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 10.10.2013 Репутация: нет Всего: нет |
если можно то поподробнее, с приблизительным примером.
|
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
||||
|
||||
4ygynOK |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 10.10.2013 Репутация: нет Всего: нет |
||||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
последний return FALSE; замени на TRUE
|
|||
|
||||
4ygynOK |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 10.10.2013 Репутация: нет Всего: нет |
Ничего не дает, если я правильно понял про return TRUE в самом конце после catch? |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
да. тут
ожидается, что в случае нормальной работы DeleteDir() возвращает TRUE. Погляди, на чем у тебя заканчивается - это либо данные из базы, либо DeleteDir() не в нужный момент FALSE возвернул |
|||
|
||||
4ygynOK |
|
||||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 10.10.2013 Репутация: нет Всего: нет |
Удаление происходит но catch как я понимаю вызывается несколько раз. Так-как окошек выскакивает несколько прежде чем удалится. |
||||
|
|||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
наверно это не хорошо. что в базе? что в e.Description()?
Добавлено через 2 минуты и 39 секунд вот это странный фрагмент
логика должна быть такая: сначала удалить потомков, потом себя. никаких проверок при этом не нужно |
|||
|
||||
4ygynOK |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 10.10.2013 Репутация: нет Всего: нет |
e.Description() - представляет собой сообщение из базы. В моем случае оно мне говорит что в папке есть связанные записи с такой-то таблицей. База, точнее таблица с которой мы работаем состоит из 4 столбцов ID(именно его мы потом засовываем в it там все по порядку), Parent_ID соответственно указывает на родительский ID, Name - имя папки, Number какое-то числовое значение, но насчет его сказали не парится. вот ссылка на скрин с базы: http://s2.ipicture.ru/uploads/20131011/5HGGOmlv.bmp Это сообщение отредактировал(а) 4ygynOK - 11.10.2013, 18:18 |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
тут что-то с логикой.
убери строчки 25-28, 34-35: если есть вложенные папки, их надо удалить, что и делается в цикле. но сама папка не удаляется (из-за проверки и условия), поэтому не удается удалить и родительские. вобщем походу это просто лишнее. |
|||
|
||||
4ygynOK |
|
||||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 10.10.2013 Репутация: нет Всего: нет |
если сделать так то впринципе удаляется. Вот только не так как надо: допустим у нас есть один родительский каталог и 2 подкаталога, если мы можем удалить только один из двух подкаталогов, то этот код удалит этот 1 подкаталог, а ещё родительский впридачу, что делать не нужно, для этого я и организовал это условие. Вот как-то так пока. Спасибо baldina что помогаешь!! |
||||
|
|||||
akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Если не делается, как советует baldina, то оберни твой цикл for(...) в цикл
while(lstIds.size() > 0) { // твой for, в котором ты будешь удалять каталоги, для которых не указан некий родительский, проверку на это надо будет // тоже впихнуть. при удалении каталоги будешь удалять из контейнера соответствующий элемент. } Это сообщение отредактировал(а) akizelokro - 12.10.2013, 07:36 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
нет. ф-ия DeleteDir(DWORD BUGO_Id) должна удалять BUGO_Id и его подкаталоги, но не родительский. она сейчас так и делает:
так что все в порядке. если есть два каталога (скажем с id 2 и 3) в родительском (id=1), и мы хотим удалить каталог с id=2, то вызываем DeleteDir(2). каталоги с id=1, id=3 останутся нетронутыми |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |