Erro "Diretório não está vazio" ao tentar excluir programaticamente uma pasta

No meu aplicativo, eu construí um sistema onde os usuários podem criar galerias de fotos. Fotos mantidas em pastas no formato category_name / gallery_name / {pictures} no disco. Cada foto enviada é armazenada sob a estrutura de diretórios relevante, conforme indicado acima.

Ao tentar excluir uma categoria, além de excluir do banco de dados, também quero excluir pastas relevantes do sistema. Quando recebi pela primeira vez a mensagem de erro "O diretório não está vazio" Iprocurou e encontrou esta solução:

public static void DeleteDirectory(string target_dir)
    {
        string[] files = Directory.GetFiles(target_dir);
        string[] dirs = Directory.GetDirectories(target_dir);

        foreach (string file in files)
        {
            File.SetAttributes(file, FileAttributes.Normal);
            File.Delete(file);
        }

        foreach (string dir in dirs)
        {
            DeleteDirectory(dir);
        }

        Directory.Delete(target_dir, false);
    }

Com esta solução, as fotos na pasta "gallery_name" são excluídas muito bem, então a pasta gallery_name em si é excluída como multa .. então ficamos com uma pasta vazia category_name. Então o último pedaço de código na sub-rotina acima (Directory.Delete(target_dir, false);) é chamado para excluir a pasta category_name. O erro aumenta novamente ..

Alguém sabe uma solução para isso?

Directory.Delete(target_dir, true); não funcionou, por isso tentei uma alternativa.Eu tenho controle total sobre a pasta pai e as pastas category_name e gallery_name também são criadas programaticamente sem nenhum problema.Como mencionei, os subdiretórios (pastas gallery_name) e seu conteúdo (fotos) são apagados com este código. É a pasta category_name que causa o erro, mesmo depois desse código, é apenas uma pasta vazia.

A mensagem de exceção que recebo é:

System.IO.IOException was unhandled by user code
  HResult=-2147024751
  Message=The directory is not empty.

  Source=mscorlib
  StackTrace:
       at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
       at System.IO.Directory.DeleteHelper(String fullPath, String userPath, Boolean recursive, Boolean throwOnTopLevelDirectoryNotFound)
       at System.IO.Directory.Delete(String fullPath, String userPath, Boolean recursive, Boolean checkHost)
       at System.IO.Directory.Delete(String path)
       at MyApp.PhotoGallery.Categories.deleteCategory(Int32 cID, String categoryname) in d:\Documents\My Dropbox\web projects\MyAppFolder\App_Code\BLL\PhotoGallery.vb:line 291
       at _admhades_PhotoGallery.deleteCategory(Int32 categoryID, String categoryname) in d:\Documents\My Dropbox\web projects\HavadisPre\_admhades\PhotoGallery.aspx.vb:line 71

questionAnswers(5)

yourAnswerToTheQuestion