Rimuovere una cartella assumendone il controllo
Updated at: 30/09/2014


Ogni tanto può capitare che sebbene si stia girando con i diritti di amministratore, alcune cartelle non vengano cancellate, con la segnalazione di "permission denied". Per ovviare al problema è possibile usare queste due funzioni (una in realtà chiama l'altra)

        public static bool rimuovi_directory(string folder, bool recursive = true)
        {
            bool risultato = false;
            try
            {
                System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(folder);

                if (dir.Exists)
                {
                    setAttributesNormal(dir);
                    dir.Delete(recursive);
                }

                risultato = true;
            }
            catch (Exception e)
            {
                risultato = false;
            }

            return risultato;
        }

        private static void setAttributesNormal(DirectoryInfo dir)
        {
            foreach (DirectoryInfo subDirPath in dir.GetDirectories())
            {
                try
                {
                    setAttributesNormal(subDirPath);
                }
                catch (Exception e) { }
            }
            foreach (FileInfo filePath in dir.GetFiles())
            {
                try
                {
                    filePath.Attributes = FileAttributes.Normal;
                }
                catch (Exception e) { }
            }
        }