Проблемы в коде для удаления директории.
Добавлено: 10 окт 2013, 18:26
Приведу код:
Данный код работает на корректное удаление директорий только до уровня вложенности 2, а надо бы до любого, как мне это провернуть? Помогите пожалуйста, если что-то необходимо, то поясню очень быстро.
Код: Выделить всё
BOOL CUGODatabaseMng: :D eleteDir(DWORD BUGO_Id)
{
ASSERT(m_pDatabaseMng);
if (!m_pDatabaseMng)
return FALSE;
BOOL bParent = TRUE;
BOOL bDelParent = TRUE;
try
{
std::list<DWORD> lstIds;
CString sSQL;
sSQL.Format(_T("SELECT ID FROM BUGO WHERE PARENT_ID=%d"), BUGO_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();
}
if (nRecordCount > 1)
{
bParent = TRUE; // проверка наличия вложенных каталогов
}
spRS->Close();
for (std::list<DWORD>::iterator it = lstIds.begin(); it != lstIds.end(); ++it)
{
if (bParent)
bDelParent = FALSE; //если есть вложенные каталоги, то родительская не удаляется
if (!DeleteDir(*it))
return FALSE;
}
if (bDelParent)
{
sSQL.Format(_T("DELETE FROM BUGO WHERE ID=%d"), BUGO_Id);
VERIFY(m_pDatabaseMng->ExecuteSQL(sSQL));
return TRUE;
}
}
catch (_com_error& e)
{
if (AfxMessageBox(CString(_T("Удаление каталога невозможно!\n")) + (LPCTSTR)e.Description() + CString(_T("\nПродолжить удаление?")),MB_OKCANCEL) == IDOK)
{
return TRUE;
}
else return FALSE;
}
return FALSE;
}