Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2013, 20:26   #1
4ygynOK
 
Регистрация: 29.05.2010
Сообщений: 3
По умолчанию Проблема при удалении директории.

Прошу вас помочь в решении следующей задачи. Существует функция для удаления директории:
Код:
BOOL DeleteDir(DWORD B_Id)
{
	ASSERT(m_pDatabaseMng);
	if (!m_pDatabaseMng)
		return FALSE;

	try
	{
		std::list<DWORD> lstIds;

		CString sSQL;
		sSQL.Format(_T("SELECT ID FROM BUGO WHERE PARENT_ID=%d"), B_Id);

		ADODB::_RecordsetPtr spRS = m_pDatabaseMng->OpenRecordset(sSQL);
		long nRecordCount = spRS->GetRecordCount();
		
		for (long nRecord = 0; nRecord < nRecordCount; ++nRecord)
		{
			lstIds.push_back((long)spRS->GetFields()->GetItem(_T("ID"))->GetValue());
			spRS->MoveNext();
		}
	
		spRS->Close();

		for (std::list<DWORD>::iterator it = lstIds.begin(); it != lstIds.end(); ++it)
		if (!DeleteDir(*it))
		return FALSE;
					
		sSQL.Format(_T("DELETE FROM BUGO WHERE ID=%d"), B_Id);
		VERIFY(m_pDatabaseMng->ExecuteSQL(sSQL));
		
	}
	catch (_com_error& e)
	{
		if(AfxMessageBox(CString(_T("Удаление каталога невозможно!\n")) + (LPCTSTR)e.Description()+ CString(_T("\nПродолжить удаление?")),MB_OKCANCEL)== IDYES);
	}

	return FALSE;
}
На данный момент происходит следующее если мы не можем удалить директорию, то вываливается сообщение из catch при нажатии на кнопку ОК удаляются все каталоги до достижения условия if (!DeleteDir(*it)).
Теперь вопрос как мне сделать так чтобы при нажатии на кнопку ОК у меня удалялись все возможные директории, а не до первой, которую невозможно удалить. А при нажатии на ОТМЕНА происходило то что и сейчас. Можно ли это реализовать в catch, или придется что-то переписывать?
Прошу помощи уважаемые...
4ygynOK вне форума Ответить с цитированием
Старый 06.10.2013, 22:46   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Попробуй
Код:
if(AfxMessageBox(.........)== IDYES) return TRUE;
eoln вне форума Ответить с цитированием
Старый 06.10.2013, 23:37   #3
4ygynOK
 
Регистрация: 29.05.2010
Сообщений: 3
По умолчанию

Код:
if(AfxMessageBox(.........)== IDYES) return TRUE;
Выполнится только условие удаления до первого невозможного, а необходимо добавить ещё чтобы удалялось ещё и после такого.
4ygynOK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при удалении компонента Putin-mode Общие вопросы Delphi 18 24.01.2012 23:28
Проблема при удалении(вырезании) файлов lionbeast Помощь студентам 3 11.10.2009 11:56
ошибка при удалении символа Virus191288 Общие вопросы Delphi 13 15.08.2009 14:50
Проблема со значением поля-счетчика при удалении записи RammFan БД в Delphi 11 02.04.2009 22:54
Ошибка при удалении... JRcoker Общие вопросы Delphi 8 29.07.2008 22:53